【问题标题】:How to merge 2 group by select statements如何通过选择语句合并 2 个组
【发布时间】:2020-07-21 03:19:00
【问题描述】:

我有 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

【问题讨论】:

  • 标记您正在使用的 DBMS。

标签: sql merge group-by union


【解决方案1】:

你可以做聚合:

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; 

【讨论】:

    【解决方案2】:

    你可以做一个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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多