在mysql中,如果字段值为null会引起数据查询的不准确性,请问在哪些场景下会出现统计不准确的情况?

提问者:帅平 问题分类:数据库
在mysql中,如果字段值为null会引起数据查询的不准确性,请问在哪些场景下会出现统计不准确的情况?

 您阅读本篇文章共花了: 

8 个回答
凉眸似水°
凉眸似水°
第四种情况:导致空指针异常
当我们使用一些函数,比如求和函数sum(column) 或者平均值之类的函数,如果所求的字段中有空值,所求的值就会为空而非0。
如果 sum 查询的结果为 NULL 就可以能会导致程序执行时空指针异常(NPE),我们来演示一下这个问题。
为了演示这个问题,首先我们先构建一张表和一些测试数据:

接下来我们使用 sum 查询,执行以下 SQL:

查询执行结果如下:

当查询的结果为 NULL 而非 0 时,就可以导致空指针异常。
解决空指针异常,可以使用ifnull()对空值进行处理来避免空指针异常:
发布于:12个月前 (05-06) IP属地:四川省
我怕时间不够
我怕时间不够
第三种情况:select数据丢失
如果某列存在 NULL 值时,如果执行非等于查询(<>或者!=)会导致为 NULL 值的结果丢失,比如下面的这些数据:

当我们查询name不等于"Java"的所有数据时,预期结果应该是id从2到10的数据,但是执行以下sql查询时:

查询结果如下所示:

可以看出id=9和id=10的name为 NULL 的两条数据没有查询出来,这个结果并不符合我们的正常预期。
要解决以上的问题,只要修改条件,将姓名不等于Java或者是空值的查出来即可,执行 SQL 如下:

执行结果如下:

可以看出10条数据都查询出来了,这个结果符合我们的正常预期。
发布于:12个月前 (05-06) IP属地:四川省
安若兮
安若兮
第二种情况:distinct 数据丢失
当使用语句count(distinct column1,column2)时,如果有一个字段值为空,即使另一列有不同的值,那么查询的结果也会将数据丢失,如下图:

查询执行结果如下:

数据库的原始数据如下:

从上述图所示,mobile列的10条数据都是不一样,但是查询的结果却只有8条。
发布于:12个月前 (05-06) IP属地:四川省
情若相惜
情若相惜
第一种情况:count数据丢失
count是用来计数的,当表中某个字段存在NULL 值时,就会造成count计算出来的数据丢失,例如:

查询执行结果如下:

从上述结果可以看出,count(*)和count(name)的值不一样,即当使用的是 count(name) 查询时,就丢失了两条值为 NULL 的数据。
所以,如果某列存在 NULL 值时,就是用 count(*) 进行数据统计。
发布于:12个月前 (05-06) IP属地:四川省
我来回答