如何对特定列中具有相同值的行求和

时间:2017-06-16 16:49:13

标签: sql sum amazon-redshift

我正在尝试获得显示展示位置产生的收入的结果。要计算展示位置收入,我需要执行此计算(campaign_cpc(€)*由展示位置生成的点击次数)。一个展示位置可以使用不同的campaign_cpc生成点击次数。

现在我得到的结果是这样的:

+------------------+---------------------+
| placement_name   | placement_revenue_€ |
+------------------+---------------------+
| placement_name_1 | 147,2               |
+------------------+---------------------+
| placement_name_1 | 170,95              |
+------------------+---------------------+
| placement_name_2 | 14,4                |
+------------------+---------------------+
| placement_name_2 | 51,35               |
+------------------+---------------------+

这是因为每个展示位置(展示位置1和2)都使用两个不同的campaign_cpc生成了点击次数。

但实际上我需要按展示位置汇总的结果:

+------------------+---------------------+
| placement_name   | placement_revenue_€ |
+------------------+---------------------+
| placement_name_1 | 318,15              |
+------------------+---------------------+
| placement_name_2 | 65,75               |
+------------------+---------------------+

我正在使用的查询就是这个:

SELECT
      placement_name,
      campaign_cpc*clicks as placement_revenue_€

FROM (

      SELECT
            p.name as placement_name,
            cc.cpc as campaign_cpc,
            COUNT(CASE WHEN re.event_type = 'click' 
            AND content_card_id IS NOT NULL THEN event_type END) as clicks

      FROM  raw_events re
      JOIN  app_data.placements p ON p.id=re.placement_id
      JOIN  app_data.content_cards cc ON cc.id=re.content_card_id

      GROUP BY 
          cc.cpc,
          p.name
      )

GROUP BY
      placement_name,
      clicks

ORDER BY 
      placement_name

如何修改上述查询以获得汇总结果?

我在i686-pc-linux-gnu上使用PostgreSQL 8.0.2,由GCC gcc(GCC)3.4.2 20041017(Red Hat 3.4.2-6.fc3)编译,Redshift 1.0.1337

非常感谢!

1 个答案:

答案 0 :(得分:1)

修复语句以获得所需结果的方法是不按分组进行分组。仅按placement_name分组。这将不再区分具有不同点击次数的行,因此您的求和将正常工作。还要在select语句中点击总和。