You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:28:40