2017-07-17 108 views
1

我想計算CASE條件的SUM,其中一個條件使用相關子查詢來查找結果,但我堅持使用語法。Postgresql - 條件SUM與相關子查詢

這裏是我創建到現在爲止,但有錯誤的查詢的一個示例:

更新

SELECT t1.account, 
     t1.date 
     SUM(CASE WHEN condition1 THEN t1.amount 
       WHEN condition2 THEN (select sum(t2.amount) from t2 where t2.account = t1.account and t2.date = t1.date) 
       ELSE 0 END) as total 
FROM t1 
GROUP BY t1.account, t1.date 

上述查詢返回時,子查詢的輸出是多個記錄錯誤的結果。簡而言之,condition2的結果是sum(t2.amount)*(記錄數)。

我試圖從子查詢中刪除sum()函數,但因爲它可以獲取多個記錄,我仍然有一個錯誤。

我相信它可以做某事,但我卡住了。

任何人都可以提出一些建議。

btw我正在使用Postgresql 9.4

回答

1

你可以先做一個聚合。正如措詞,您的查詢似乎試圖做到這一點:

SELECT t1.account, 
     SUM(CASE WHEN condition1 THEN t1.amount 
       WHEN condition2 THEN t2.sumamount 
       ELSE 0 
      END) as total 
FROM t1 LEFT JOIN 
    (SELECT t2.account, SUM(t2.amount) as t2.sumamount 
     FROM t2 
     GROUP BY t2.account 
    ) t2 
    ON t2.account = t1.account 
GROUP BY t1.account 
+0

謝謝你的幫助。我已經更新了查詢,以更精確地查詢我想要的內容,並用查詢的當前行爲描述了問題。即使你的解決方案,我也有同樣的結果。我相信這是由於雙重聚合,外部SUM()。有沒有另外一種方法可以避免這種行爲? –

+1

@GiannisDim由於您無法通過編寫查詢來表達預期輸出,因此您需要將數據樣本和預期輸出顯示爲數據。 –