必须出现在 GROUP BY 子句中或在聚合函数中使用 (PostgreSQL)

Ayh*_*aru 2 mysql postgresql

我有这样的查询:

select u.fullname ,s.schedate,
sum(case when s.isvisiting =1 then s.isvisiting else 0 end) as visit ,
count(s.custid) as cust, 
sum(case when s.isclosing = 1 then s.isclosing else 0 end)as orders 
from vmstrschedule s JOIN vmsmsuser u ON u.usercode = s.salesmanid 
where u.branchid = 'BLL' group by u.fullname
Run Code Online (Sandbox Code Playgroud)

但它显示这样的错误:

必须出现在 GROUP BY 子句中或在聚合函数中使用

它在 MySQL 中可以工作,但是当我在 PostgreSQL 中尝试它时,它不起作用。我想每月显示这样的数据:

在此输入图像描述

但如果我使用这个查询:

select u.fullname,s.schedate,
sum(case when s.isvisiting =1 then s.isvisiting else 0 end) as visit ,
count(s.custid) as cust, 
sum(case when s.isclosing = 1 then s.isclosing else 0 end)as orders 
from vmstrschedule s JOIN vmsmsuser u ON u.usercode = s.salesmanid 
where u.branchid = 'BLL' group by u.fullname,s.schedate
order by u.fullname
Run Code Online (Sandbox Code Playgroud)

它将显示如下数据:

在此输入图像描述

Dam*_*ver 5

如果“有效”意味着它为每个组任意选择一个可能的schedate值,那么你是对的。然而,postgresql 和大多数其他 SQL 产品希望您明确他们应该选择什么值

如果每个组中的所有值都相同,则将其放入子句GROUP BY或任意聚合(例如MAX(s.schedate))中应该可以。如果值不同,请告诉服务器应该选择哪一个 - MIN、 或MAX通常是合适的。