SQL:组和子组的总和

时间:2016-12-02 22:49:19

标签: sql postgresql group-by case

我的数据格式如下:

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

我尝试过:

{{1}}

这并没有显示我想要的方式。 我能做些什么不同?

1 个答案:

答案 0 :(得分: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)更有效,但这不是你开始的路径。