如何合并两个MySQL查询并通过单查询汇总数据
合并两个MySQL按月汇总查询的解决方案
嗨,我之前刚好处理过类似的需求,用纯MySQL语句就能完美搞定!核心思路是先把两个表的月份统计结果统一格式,合并后再重新分组汇总,这样就能拿到每个月的两个求和值了。
直接上可用的SQL代码:
SELECT month AS Date, SUM(sms_total) AS `sum(sms)`, SUM(camp_sms_total) AS `sum(camp_sms)` FROM ( -- 处理第一个表的按月统计,给第二个统计字段补0避免空值 SELECT DATE_FORMAT(campaign_date, '%Y-%m') AS month, SUM(sms) AS sms_total, 0 AS camp_sms_total FROM table1 GROUP BY month UNION ALL -- 处理第二个表的按月统计,给第一个统计字段补0 SELECT DATE_FORMAT(trans_date, '%Y-%m') AS month, 0 AS sms_total, SUM(camp_sms) AS camp_sms_total FROM table2 GROUP BY month ) AS combined_data GROUP BY month ORDER BY month;
关键逻辑说明
- UNION ALL的选择:用
UNION ALL而非UNION,因为两个子查询都是按月唯一分组的,不会产生重复行,效率更高。 - 补0处理:在每个子查询里给另一表的统计字段设为0,避免合并后出现
NULL值,确保后续求和计算准确。 - 外层分组汇总:对合并后的数据集再次按月分组,把同一个月的两类统计值分别求和,就能得到你想要的每行对应一个月份、两个统计列的结果。
- 排序优化:最后加
ORDER BY month让结果按时间顺序排列,看起来更直观。
如果某个月只有其中一个表有数据,另一个统计值会显示0,完全满足你对结果格式的要求。
内容的提问来源于stack exchange,提问作者Asfandyar Khan
相关产品推荐
相关产品推荐

