在使用 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为:

在使用group by某列名进行分组统计时,该列名的数据有些为 null, 因而会出现 null 的数据行全部分成一组导致数据错误,所以 null 列名的数据行不能执行group by直接执行查询得到的结果为:使用group by进行查询得到的结果为:很明显,因为master_name有的列为空,所以导致分组的时候将master_name为空的全部合并到一组去了解决方案:IFNULL() 函数和 UUID() 函数网上有类似的解决方案,通过IFNULL()函数搭配UUID..
CREATE TABLE IF NOT EXISTS A(id INT PRIMARY KEY AUTO_INCREMENT ,NAME VARCHAR(10)) ; CREATE TABLE IF NOT EXISTS B(id INT PRIMARY KEY AUTO_INCREMENT ,NAME VARCHAR(10) ,aid INT NOT NULL ) ; INSERT INTO A
方法说明: group by 分组 if Null (a,b) 如果 a为 null 则返回a 否则返回 b SELECT if null (ff.ClassifyImgResultId,‘无’) itemCode, if null (ff.ClassifyImgResultName,‘无’) itemName,count(1) itemNum FROM 表A ff, 表B c where ff.StateType=‘1’ and ff.FmCaseExdId = c.FmCaseExdId and c.ErrorTy
统计 数据 需要按省份分组,这是大家经常遇到的问题。今天遇到一奇葩问题,由于省份(province)字段 数据 不规范, 有的是省份名称,有的是 "" (空)  有的是 "未知"。这时 group by province 时就会出现未知的一组  空 数据 的一组  当然 前台是不能显示空省份的  如果把空省份都循环赋值为未知的话  前台显示未知省份 显得也不是那么和谐。     解决办法: