DB2 SQL多表分组查询:按date统计table 1/table 2条目数
DB2 SQL 跨表日期统计解决方案
我来给你写一个完全符合需求的DB2 SQL语句,刚好能实现你要的跨表日期统计效果,完美匹配你给出的示例数据和期望结果:
WITH all_dates AS ( -- 获取两张表中所有唯一的日期值 SELECT date FROM table1 UNION SELECT date FROM table2 ), table1_counts AS ( -- 统计table1每个日期的条目数 SELECT date, COUNT(*) AS sum_table1 FROM table1 GROUP BY date ), table2_counts AS ( -- 统计table2每个日期的条目数 SELECT date, COUNT(*) AS sum_table2 FROM table2 GROUP BY date ) -- 合并结果,用COALESCE处理无数据的情况为0,计算总数 SELECT ad.date, COALESCE(t1.sum_table1, 0) AS "sum from table 1", COALESCE(t2.sum_table2, 0) AS "sum from table 2", COALESCE(t1.sum_table1, 0) + COALESCE(t2.sum_table2, 0) AS "total count" FROM all_dates ad LEFT JOIN table1_counts t1 ON ad.date = t1.date LEFT JOIN table2_counts t2 ON ad.date = t2.date ORDER BY ad.date;
代码说明:
- all_dates CTE:通过
UNION获取两张表中所有不重复的日期,确保所有出现过的日期都会出现在最终结果里 - table1_counts/table2_counts CTE:分别对两张表按日期分组统计条目数量
- 主查询:用
LEFT JOIN将日期集合和两张表的统计结果关联,COALESCE函数把没有匹配到的统计值转为0,最后通过两个统计值相加得到总数,最后按日期排序让结果更直观
用你给出的示例数据测试的话,得到的结果和你期望的完全一致:
date | sum from table 1 | sum from table 2 | total count
2018-03-15 | 0 | 1 | 1
2018-03-20 | 2 | 1 | 3
2018-03-25 | 1 | 0 | 1
内容的提问来源于stack exchange,提问作者Leila
相关产品推荐
相关产品推荐

