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

如何用SQL对比两张按日期分组求和的同结构表,缺失日期补0?

实现两张分组后表的日期维度金额对比汇总

现有分组查询结果

表A

执行分组求和SQL:

SELECT SUM(amount) AS amount, DATE_FORMAT(date,'%m %y') AS date FROM `TableA` GROUP BY DATE_FORMAT(date,'%m%y');

得到结果:

amountdate
1105 22
2206 22
3307 22
4408 22
5509 22
6610 22

表B

执行分组求和SQL:

SELECT SUM(amount) AS amount, DATE_FORMAT(date,'%m %y') AS date FROM `TableB` GROUP BY DATE_FORMAT(date,'%m%y');

得到结果:

amountdate
7707 22
8808 22
9909 22
11110 22
22211 22

生成对比汇总表的SQL方案

通过获取所有唯一日期,再左连接两张表的分组结果,用COALESCE将缺失值补0,最终按日期排序:

WITH all_dates AS (
    SELECT date FROM (
        SELECT DATE_FORMAT(date,'%m %y') AS date FROM TableA
        UNION
        SELECT DATE_FORMAT(date,'%m %y') AS date FROM TableB
    ) AS dates
)
SELECT
    COALESCE(a.amount, 0) AS `amount(Table A)`,
    COALESCE(b.amount, 0) AS `amount(Table B)`,
    ad.date AS `date`
FROM all_dates ad
LEFT JOIN (
    SELECT SUM(amount) AS amount, DATE_FORMAT(date,'%m %y') AS date FROM TableA GROUP BY DATE_FORMAT(date,'%m%y')
) a ON ad.date = a.date
LEFT JOIN (
    SELECT SUM(amount) AS amount, DATE_FORMAT(date,'%m %y') AS date FROM TableB GROUP BY DATE_FORMAT(date,'%m%y')
) b ON ad.date = b.date
ORDER BY STR_TO_DATE(ad.date, '%m %y');

最终输出结果

amount(Table A)amount(Table B)date
11005 22
22006 22
337707 22
448808 22
559909 22
6611110 22
022211 22

内容的提问来源于stack exchange,提问作者Kyaw Wint Thu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:45:34