WHERE 语句使 SELECT 中的聚合函数无法正常工作

问题描述

我有一个全文搜索查询,需要使用搜索查询(实际搜索)和不使用搜索查询(仅提供分页的结果列表)来执行。

我有这样一个结构,有一个 Meeting 表可以(通过其他表)有两个 User(别名:membersp)。这就是为什么我需要使用 max 聚合函数(以便将“user”表中的两条数据合并为一行)。

但是,当我使用 where 子句时,列 member_fullnamemember_id 都等于 NULL。如果我删除 where 子句,一切都会按预期进行。

我真的不明白为什么会发生这种情况以及 where 子句如何导致这种情况。 max 函数似乎以某种错误的方式开始工作。

下面是我的 sql 查询。 如果我删除 where 子句,一切正常。如果添加 where 子句,则 member_fullnamemember_id 列变为 NULL

with search as (
  SELECT
    to_tsquery(string_agg(lexeme || ':*',' | ' order by positions)) as query
    FROM unnest(to_tsvector('sp2'))
  )
  SELECT 
    meeting.*,business.company as member_company,companydepartment.name as sp_company,department.name as member_department,project.baseprice as meeting_price,max(case when salesprofile.userid = "user".id then "user".id end) as sp_id,max(case when salesprofile.userid = "user".id then "user".firstname || ' ' || "user".lastname end) as sp_fullname,max(case when business.userid = "user".id then "user".id end) as member_id,max(case when business.userid = "user".id then "user".firstname || ' ' || "user".lastname end) as member_fullname,count(*) over() as total_count
  FROM
    search,meeting
      join project on project.id = meeting.projectid
      left join business on business.id = project.businessid
      left join departmentdetail on business.id = departmentdetail.businessid
      left join department on department.id = departmentdetail.department
      left join salesprofile on salesprofile.id = meeting.salesprofileid
      left join companydepartment on salesprofile.id = companydepartment.salesprofileid
      join "user" on "user".id = business.userid or "user".id = salesprofile.userid
    WHERE
        to_tsvector(array_to_string(array[
        "user".firstname,"user".lastname,"user".email,business.company,companydepartment.name,meeting.zoommeetinguuid,meeting.zoommeetingid,meeting.zoomlink,meeting.pendingtext,meeting.requestedtext,meeting.status,meeting.id::text
    ],' '))
    @@ query
GROUP BY
  meeting.id,business.userid,salesprofile.userid,project.baseprice,departmentdetail.department,department.name
  order by id ASC nulls last
  offset 0
  limit 100;

这是否是一个 group by 问题?

你能帮我完成这项工作吗?

并解释为什么无害的where子句会以这种方式影响查询结果?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...