如何将三条MySQL统计查询语句合并为一条?
没问题!这事儿很容易解决——我们可以把三个查询的日期维度合并,再用条件聚合的方式把统计结果拆分成你要的三列,直接输出目标格式。
合并查询的具体实现方案
SELECT all_dates.date, COUNT(CASE WHEN src = 't1_created' THEN 1 END) AS count1, COUNT(CASE WHEN src = 't2_created' THEN 1 END) AS count2, COUNT(CASE WHEN src = 't1_started' THEN 1 END) AS count3 FROM ( -- 收集所有可能的日期(覆盖三个查询的所有时间维度) SELECT DATE(created_at) AS date, 't1_created' AS src FROM t1 UNION ALL SELECT DATE(created_at) AS date, 't2_created' AS src FROM t2 UNION ALL SELECT DATE(date_started) AS date, 't1_started' AS src FROM t1 ) AS all_dates GROUP BY all_dates.date ORDER BY all_dates.date DESC;
代码逻辑说明:
- 子查询
all_dates:通过UNION ALL把三个表/字段的所有记录(带上来源标识)合并,确保不会漏掉任何一个需要统计的日期。 - 条件统计:用
COUNT(CASE...)分别对每个来源的记录计数——当来源匹配时返回1,不匹配时返回NULL,而COUNT会自动忽略NULL值,刚好满足你需要的“无数据时显示null”的要求。 - 排序优化:最后加上
ORDER BY date DESC,让结果按日期倒序排列,方便查看最新的统计数据。
如果希望无数据时显示0而非NULL,只需要把COUNT换成SUM,并给ELSE分支设为0即可:
SUM(CASE WHEN src = 't1_created' THEN 1 ELSE 0 END) AS count1
内容的提问来源于stack exchange,提问作者NaGeL182
相关产品推荐
相关产品推荐

