繁体   English   中英

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

[英]Must appear in the GROUP BY clause or be used in an aggregate function (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

但它显示如下错误:

必须出现在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

它将显示如下数据:

在此处输入图片说明

如果按“工作”的意思是它为每个组任意选择了一个可能的schedate值,那是正确的。 但是,postgresql和大多数其他SQL产品希望您明确选择应选择的值

如果每个组中的所有值都相同,则将其放在GROUP BY子句或任意聚合中(例如MAX(s.schedate) )应该起作用。 如果值不同,请告诉服务器应该选择哪一个MINMAX通常比较合适。

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 

应该管用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM