我有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
答案 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;