现在我正在处理 SQL 文件并有一个问题: 我想用sql文件中的数据来回顾一下促销事件的效果。 SQL文件中有2个表,网络流量和促销事件
网络流量表,假设网络表如下
visitor_id purchase date traffic_source campaign_name country purchase_value
1 1/1/2018 Search promotion101 US 100
2 2/1/2018 Direct voucher02 UK 110
3 2/1/2018 Search buyme01 US 50
4 3/1/2018 Banner Example01 DE 130
.. ....... ... ... .. ...
在第二个表中,我有事件信息,比如说表促销
Promotion_date campaign_name num_delivered promotion_fee
1/12/2017 promotion101 50 30
2/12/2017 promotion101 30 20
2/12/2017 voucher02 40 10
3/12/2017 Example01 70 30
... ... ... ...
在这种情况下,我尝试先使用左连接合并表,但记录重复了
Select
web.campaign_name,
sum(web.promotion_fee),
sum(promotion.purchase_value)
FROM
web LEFT JOIN promotion
ON web.campaign_name = promotion.campaign_name
GROUP BY
1
但是,它不起作用,因为左连接只是复制记录...... 在这种情况下,如果我想像这样制定表格:
Campaign_name Traffic_source Total_Customer Total_purchase_value Total expenditure
promotion101 Search 1000 2000 1500
Example01 Banner 2000 3750 3000
可以这样做吗?如果是的话我该怎么做? 非常感谢您提前的帮助!
最佳答案
您可以在单独的子查询中执行每个表的聚合:
SELECT
w.campaign_name,
w.purchase_value AS Total_purchase_value,
COALESCE(p.promotion_fee, 0) AS Total_expenditure
FROM
(
SELECT campaign_name, SUM(purchase_value) AS purchase_value
FROM web
GROUP BY campaign_name
) w
LEFT JOIN
(
SELECT campaign_name, SUM(promotion_fee) AS promotion_fee
FROM promotion
GROUP BY campaign_name
) p
ON w.campaign_name = p.campaign_name;
我在这里做出的一个关键假设是,web
表包含所有营销事件的数据。如果没有,那么您可能必须加入包含所有发生的事件的第三个表。实际上,可以说这样的表应该已经存在。
关于mysql - 如何通过左连接合并2个表中的数据,形成聚合而不重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49645696/