需求场景

根据某个值进行GROUP BY分组查询
假设某个值有:0、1、2、3、4、5
但查询时,表中没有值为3的记录,分组后则没有3这一项
需要使3这一项展示在结果集中

因为没有值为3的记录,查询结果为:

在这里插入图片描述

需求的结果应为:
在这里插入图片描述

SQL实现

思路: 确定全部分组值,获取并在sql里进行连接

不查表,不代码创建零时表获取分组值列表:

SELECT 0 AS id UNION
SELECT 1 AS id UNION
SELECT 2 AS id UNION
SELECT 3 AS id UNION
SELECT 4 AS id UNION
SELECT 5 AS id

可以获取到一个零时的结果集:

在这里插入图片描述将结果集作为主表‘r’,连接原SQL的查询结果集‘t’,则实现:

SELECT r.id, 
	   IFNULL(t.num,0)
FROM (SELECT 0 AS id UNION
	  SELECT 1 AS id UNION
	  SELECT 2 AS id UNION
	  SELECT 3 AS id UNION
	  SELECT 4 AS id UNION
	  SELECT 5 AS id) r
LEFT JOIN () t ON t.type=r.id 

特殊情况,特殊而定
一般有分组值可直接进行关联则不必这样写sql,此种方法多用与单表内的数据统计
有更好的方法可以留意,刚好遇到,记录一下

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐