如何通过选择语句合并2组

时间:2020-04-08 16:20:41

标签: sql merge group-by union

我有2个表,其中1个是免费用户,1个是付费用户,它们都在跟踪点击,我需要为每个会员链接显示引荐来源网址(域),该用户有时可能是免费用户并且某些时候可以成为付费用户,因此我需要合并两个表中的两个统计信息。

此查询无效:

SELECT ref,COUNT(ref) AS clicks 
FROM click_analytics_free 
WHERE link_id = '$link_id'
GROUP BY ref 
UNION ALL
SELECT ref,COUNT(ref) AS clicks 
FROM click_analytics_paid 
WHERE link_id = '$link_id '
GROUP BY ref

2 个答案:

答案 0 :(得分:0)

您可以执行union all,然后再次进行汇总:

SELECT ref, SUM(free_clicks), SUM(paid_clicks), 
       SUM(free_clicks + paid_clicks)
FROM ((SELECT ref, COUNT(ref) AS free_clicks, 0 as paid_clicks
       FROM click_analytics_free
       WHERE link_id = ?
       GROUP BY ref
      ) UNION ALL
      (SELECT ref, 0, COUNT(ref) AS paid_clicks
       FROM click_analytics_paid
       WHERE link_id = ?
       GROUP BY ref
      )
     ) c
GROUP BY ref;

?是参数占位符。您的代码应该使用参数,而不是查询字符串。

答案 1 :(得分:0)

您可以进行聚合:

SELECT ref, 
       SUM(CASE WHEN flag = 'free' THEN 1 ELSE 0 END) AS free_click,
       SUM(CASE WHEN flag = 'paid' THEN 1 ELSE 0 END) AS paid_click
FROM (SELECT ref, 'free' as flag 
      FROM click_analytics_free 
      WHERE link_id = '$link_id '
      UNION ALL
      SELECT ref, 'paid' as flag 
      FROM click_analytics_paid 
      WHERE link_id = '$link_id'
     ) t
GROUP BY ref; 
相关问题