[英]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.