IFNULL(COUNT(*),0) 结果为 NULL

原创
2016/07/11 11:54
阅读数 3.6K

IFNULL(COUNT(*),0) 结果为 NULL,是你也会奇怪吧?不是说 count 返回的值是 0 或大于 0 的数值吗?就算 count 返回 null,那么IFNULL也因该 返回 0 啊?

首先来看看这条语句:

 

    SELECT COUNT(*) FROM t_paper_structure tps WHERE tps.paper_id = 210 AND tps.structure_type = 4 

 

返回的结果应该是 0 或者大于 0 的数值,但是不会返回 null , 所以很多人就会觉得 count 不会返回 null,那接着看下面的语句

 

    SELECT COUNT(*) FROM t_paper_structure tps WHERE tps.paper_id = 210 AND tps.structure_type = 4 GROUP BY tps.paper_id 

 

和上面相比多了一个 group by 分组,千万别小看 MySQL的 group by , 它可比 Oracle 、SQLServer的灵活多了。加了分组之后的返回结果是 null , 0 ,>0;这个时候就会问为什么呢?count这么还会返回 null 呢?然后,就会想到使用 IFNULL ,接着下面的语句

 

    SELECT IFNULL(COUNT(*),0) FROM t_paper_structure tps WHERE tps.paper_id = 210 AND tps.structure_type = 4 GROUP BY tps.paper_id 

 

如果为空就应该返回 0 ,否则返回 count(*) 的值,可是事与愿违,它返回的结果还是 null , 0 ,>0;

注意 IFNULL:查询出的这条记录要有值,只是这条记录的某个字段为null时,才可以使用ifnull

那么,可以这样解释结果为null的情况,首先执行 WHERE tps.paper_id = 210 AND tps.structure_type = 4 ,表中没有这样的记录,所以返回为空,然后 group by ,分组的前提是必须要有记录,如果有记录哪怕分组的字段是null也会对null进行分组统计,但是如果没有记录,那么就会返回null。另外  IFNULL 同样也是要有记录,才会有效果,如果没有记录,返回的还是null。

 

感谢这篇博客 : http://my.oschina.net/u/2312022/blog/703396

 

 

展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部