在使用 group by
某列名进行分组统计时,该列名的数据有些为 null, 因而会出现 null 的数据行全部分成一组导致数据错误,所以 null 列名的数据行不能执行 group by
直接执行查询得到的结果为:
使用group by进行查询得到的结果为:
很明显,因为master_name有的列为空,所以导致分组的时候将master_name为空的全部合并到一组去了
解决方案:
IFNULL() 函数和 UUID() 函数
网上有类似的解决方案,通过IFNULL()
函数搭配UUID()
函数即可解决。
1、IFNULL() 函数
IFNULL()
函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
格式如下:
IFNULL(expression, alt_value)
-- 即可以是列名
IFNULL(user.id, "hahha")
-- 也可以是具体的值
IFNULL(null, "hahha")
2、UUID() 函数
UUID()
函数是可以生成时间上独一无二的值。
3、结合使用
因此,在 group by
后使用这两个函数的格式可以如下
group by IFNULL('列名', UUID())
正确得到结果的sql为: