簡體   English   中英

使用 postgresql 的 GROUP BY CASE 語句

[英]GROUP BY CASE statement with postgresql

我正在嘗試使用 postgresql 通過 CASE 語句進行分組,但出現此錯誤“GROUP BY 中不允許使用聚合函數”

with zones as (select school, region, dt from district where dt between '1-jan-2021' and '31-jan-2021')
select c.region, to_char(a.dt, 'yyyy-mm') mth,
case when sum(a.payment)=0 then '0' else '1' end as seg,
sum(a.records)  records1,
sum(a.amount)  payment
from budget a   
left join zones c on (a.school = c.school and a.dt = c.dt)
where a.dt between '1-jan-2021' and '31-jan-2021'
group by   c.region, to_char(a.dt, 'yyyy-mm'), seg
order by c.site, to_char(a.dt, 'yyyy-mm'), seg;

先感謝您

group by 的結果只能是具有 group 中屬性的表達式(以及在功能上依賴於 group by 中的屬性的屬性)和聚合函數(這些函數的參數可以是任何屬性)。 我懷疑你可以重寫你的查詢,這樣最終的函數就是總和(在總和中移動案例)。 但...

由於“case”是在最后的投影中,你可以先做 group by,然后再做一次投影。

執行此操作(確保為使用總和計算的每個屬性指定名稱,例如 sumpayment):

WITH t as (-- original query with case removed
    SELECT ..., sum(a.payment) as sumpayment, 
     ...)
select ..., case when sumpayment=0 then '0' else '1' end as seg, 
   ... -- any other attribute
from T

應該這樣做

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM