簡體   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