文档章节

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

learn_more
 learn_more
发布于 2016/07/11 11:54
字数 487
阅读 549
收藏 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
粉丝 92
博文 240
码字总数 210196
作品 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
0
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
1
0
SQL --ifnull的使用

mysql的ifnull大伙都不陌生,肯定是用过很多次了基本用法:ifnull(expr1,expr2)如果expr1不是null,则ifnull()返回expr1的值,否则返回expr2的值。如下示例是我今天遇到的问题1.从tcc表中查询...

求是科技
2016/06/30
371
0

没有更多内容

加载失败,请刷新页面

加载更多

Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
1
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
1
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
1
0
MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

在项目开启阶段,其中一个很重要的环节就是选架构。 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式。 先...

Java干货分享
昨天
7
0
简单模仿配置文件的反射机制

//Student类 public class Student { public void love() { System.out.println("python"); } } //Tesy类 public class Tesy { public static void main(String[] args) throws Exceptio......

南桥北木
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部