如何组合2表中的数据,形成聚合而不通过左连接重复记录

时间:2018-04-04 07:59:00

标签: mysql sql

现在我正在使用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

有可能这样做吗?如果是,那我该怎么做呢? 非常感谢您的帮助!

1 个答案:

答案 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表包含所有广告系列的数据。如果没有,那么您可能必须加入第三个表格,其中包含所有发生的广告系列。实际上,可以说这样的表应该已经存在。

相关问题