SQL使用GROUP BY分组统计时未匹配分类如何返回0值
解决方案
你可以手动构造全量分类的临时结果集,再左关联原有的销量统计结果,对空值补0即可,无需依赖物理存在的分类主表。
完整SQL语句
SELECT c.category, COALESCE(s.total, 0) AS total FROM ( -- 手动枚举所有5个图书分类 SELECT 'comic' AS category UNION ALL SELECT 'horror' UNION ALL SELECT 'novel' UNION ALL SELECT 'romance' UNION ALL SELECT 'history' ) c LEFT JOIN ( -- 原有统计周期内的销量统计逻辑 SELECT category, SUM(quantity) AS total FROM tbl WHERE date BETWEEN '2021-09-01' AND '2021-09-07' GROUP BY category ) s ON c.category = s.category;
实现说明
- 内层
c表通过UNION ALL手动拼接所有需要返回的分类,相当于临时生成了一个虚拟分类主表 - 用
LEFT JOIN保留所有分类行,对应统计周期内无销量的分类,关联后的total字段会返回NULL COALESCE函数负责将空的total值替换为0,符合输出要求
如果后续图书分类有调整,只要在c表的UNION ALL部分增删对应分类枚举项即可。
内容的提问来源于stack exchange,提问作者stuckedunderflow
相关产品推荐
相关产品推荐

