文档章节

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

learn_more
 learn_more
发布于 2016/07/11 11:54
字数 487
阅读 478
收藏 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
粉丝 91
博文 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
05/18
0
0
MySQL中 IFNULL、NULLIF和ISNULL函数的用法

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

二进制的崔壮实
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...

开源中国首席有志青年
01/14
1
0
SQL --ifnull的使用

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

求是科技
2016/06/30
371
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7全局安装composer

1. 下载composer-setup.php到当前目录 php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" 2. 安装 php composer-setup.php 3. 将composer设置成全局 mv c......

月夜中徘徊
23分钟前
1
0
20180920上课截图

小丑鱼00
29分钟前
1
0
基于TCP的远程服务调用

前言 上篇,分析了基于HTTP方式的RPC调用。本篇将在上篇的基础上,分析基于TCP方式的RPC调用。代码的整体思路是一致的,可以看作是在上篇功能上的扩展——即通信的方式。 代码:https://git...

MarvelCode
32分钟前
1
0
67:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量

1、shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断、循环等语法: 可以自定义函数,目的是减少重复的代码: shell是系统命令的集合...

芬野de博客
56分钟前
1
0
json schema

json schema是用来验证和描述json对象结构的。 在线验证:https://www.jsonschemavalidator.net/ json schema 编辑器,推荐VSCode,写上"$schema": "https://raw.githubusercontent.com/jso......

谷永权
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部