在使用
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 时就会出现未知的一组 空
数据
的一组 当然
前台是不能显示空省份的 如果把空省份都循环赋值为未知的话 前台显示未知省份 显得也不是那么和谐。
解决办法: