【发布时间】:2017-06-16 16:49:12
【问题描述】:
我正在尝试获得显示展示位置产生的收入的结果。要计算展示位置收入,我需要进行此计算(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 编译
非常感谢!
【问题讨论】:
-
当前您按
click分组,但没有此名称的字段(有一个字段clicks)。此外,click之后的逗号将使其不是 SQL。所以这个问题有些不准确。基本上,@JoshKopen 有正确的修复,但问题可能不同。只需从实际输出中使用复制粘贴 - 它更快。 -
@DanGetz 谢谢你的回答。我刚刚纠正了点击的事情。这是因为我在发布之前手动压缩了查询,这样更容易阅读(原始查询中有很多类型的点击事件)。我仍然看到相同的结果。还有其他想法吗?再次感谢大家!
-
就像@JoshKopen 所说,从第二个(外部)
GROUP BY中删除clicks,并在campaign_cpc*clicks周围添加一个SUM(),它应该这样做。但也许您正在简化答案并添加一些内容。 -
你们说的其实是对的。只需将您的评论正确地转移到原始查询中。非常感谢你们,祝两位周末愉快! :-)
标签: sql sum amazon-redshift