现在我正在使用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
有可能这样做吗?如果是,那我该怎么做呢? 非常感谢您的帮助!
答案 0 :(得分:1)
您可以在不同的子查询中执行每个表的聚合:
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
表包含所有广告系列的数据。如果没有,那么您可能必须加入第三个表格,其中包含所有发生的广告系列。实际上,可以说这样的表应该已经存在。