2016-12-02 31 views
0

我有以下格式的數據:SQL:組和子組的總和

Date id impressions 
1-Jan 1 10 
1-Jan 2 20 
1-Jan 3 30 
1-Jan 1 15 
1-Jan 2 25 
1-Jan 3 35 
2-Jan 1 50 
2-Jan 2 60 
2-Jan 3 70 
2-Jan 1 55 
2-Jan 2 65 
2-Jan 3 75 

我想要的結果爲:

Date All_impressions  Id2_Impressions 
1-Jan  135     45 
2-Jan  375     135 

我試圖做:

SELECT DATE, 
    SUM(Impressions) AS All_impressions 
    , CASE WHEN id=2 SUM(impressions) ELSE 0 
     END as Id2_Impressions 
GROUP BY DATE,id 

這並沒有顯示我想要它。 我能做什麼不同?

回答

0

你就近了。用於條件聚合正確的語法是:

SELECT DATE, 
     SUM(Impressions) AS All_impressions, 
     SUM(CASE WHEN id = 2 THEN impressions ELSE 0 END) as Id2_Impressions 
FROM ?? 
GROUP BY DATE 
ORDER BY DATE; 

即,CASE表達式是一個參數傳遞給SUM()功能。您還需要一個FROM條款;我認爲這只是一個疏忽。

我應該注意到Postgres的更新版本支持FILTER子句。這可能比SUM(CASE)效率更高,但這不是你開始下的路徑。

+0

嗨戈登,感謝您的答覆。我意識到我是如何歪曲數據的。請立即查看源數據。 – Cerberus

+0

@Cerberus。 。 。這個答案中的查詢看起來會做你想做的。 –