文档章节

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

learn_more
 learn_more
发布于 2016/07/11 11:54
字数 487
阅读 1.8K
收藏 0

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

 

 

© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

MyBatis--返回值为空记录

查询一张表的一个字段的值 情况一: 测试时候用基本数据类型赋值,id为4的记录根本不存在。 控制台报空指针; 情况二: 改写SQL,用IFNULL 返回值依然用基本数据类型接收,控制台依然包空指针...

BtWangZhi
2019/05/09
0
0
MySql中is NULL、ISNULL()和IFNULL()运行速度的比较

第一步,is NULL要比ISNULL()的比较 SELECT * from 表名 where 字段名 is NULL SELECT * from 表名 where ISNULL(字段名) 查询的结果is NULL要比ISNULL()快一点。 第二步,is NULL和IFNULL(...

saulc
2018/05/18
41
0
MySQL中 IFNULL、NULLIF和ISNULL函数的用法

一、IFNULL(expr1,expr2)用法: 假如expr1不为NULL,则 IFNULL() 的返回值为expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。 mysql> SELEC...

二进制的崔壮实
2018/08/23
0
0
mysql IFNULL IF

假设有一数据表的状态字段设计为varchar类型,有以下值:NULL,pending,refund,cancel. 我们知道查询状态为cancel的订单,SQL语句可以这样写:SELECT * FROM qorder WHERE status = 'cancel' ...

chenzy526
2015/07/27
0
0
MyBatis Error:BindingException Mapper method attempted to return null

错误描述: 在使用Mybatis的项目中有一个查询最新插入数据的需求。我写了如下SQL语句: 当表中有数据时,使用这个SQL查询是没有错误的,但是当表中没有数据则会出现如下错误: org.apache.i...

开源中国首席有志青年
2018/01/14
131
0

没有更多内容

加载失败,请刷新页面

加载更多

渭南哪里可以开发票

渭南哪里可以开发票【137 * 1O 91 * 95 71】李生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是And...

DCFGH变化
13分钟前
35
0
洛阳哪里可以开餐饮费发票-中国新闻网

洛阳哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723585
13分钟前
41
0
巢湖哪里可以开发票

巢湖哪里可以开发票【电+徴亻言;132 *29 30 *05 68.李生】诚、信、合、作,保、真、售、后、保、障、长、期、有、效,点击上方“衡水发布” 可以订阅哦!郭台铭在接...

fvgds
14分钟前
58
0
咸阳哪里可以开发票

咸阳哪里可以开发票【137 * 1O 91 * 95 71】李生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是And...

bgfd科目
14分钟前
58
0
開封哪里可以开餐饮费发票-中国新闻网

開封哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723616
14分钟前
33
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部