每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

SQL中的count()函数内加条件

1. SQL语句中的count()函数内加条件

有需要新做页面统计数据总数,于是就按照条件规矩的分组查询,先查出总数,然后对分组过后的数据进行单个查询。

于是,在网上搜了一下,count()函数内能不能加条件计数,测试了一下,数据正确,sql如下 :

SELECT left(date, 4) as semester_year, 
ifnull(count(type='论文' or null), 0) as '论文数', 
ifnull(count(type='著作权' or null), 0) as '专著数', 
ifnull(count(type='专利' or null), 01) as '专利数'
FROM research_topics_achievements 
where date is not null 
GROUP BY left(date, 4)

测试结果:

2. 为什么条件里要加上 OR NULL,原因如下

如 count(semester_year = '2016' OR NULL) ,这部分为什么要加上 OR NULL ,直接 count(semester_year ='2006') 有什么问题吗?

不就是要找 semester_year = '2006' 的数据吗,为什么要计算 NULL 的数据 ?

1. 因为当 semester_year 不是 2006时 ,semester_year = '2006' 结果false,不是 NULL,Count在值是NULL的时候是不统计个数的,(count('任意内容') 都会统计出所有记录数,因为count只有在

遇见null时不计数,即count(null)==0,

2. 因此前者单引号内不管输入什么值都会统计出所有记录数,至于加上 OR NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。

3. 当 semester_year 不为2006时,semester_year = '2006' OR NULL 的结果是NULL,Count才不会统计上这条记录数。

posted @ 2021-11-16 17:15  helloliyh  阅读(4351)  评论(2编辑  收藏  举报