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)

测试结果:

至于为什么条件里要加上 OR NULL,原因如下:

如count(semester_year = '2016' OR NULL) 这部分为什么要加上 OR NULL  直接count(semester_year ='2006')有什么问题吗?不就是要找semester_year = '2006'的数据吗,为什么要计算NULL的数据?

因为当 semester_year 不是 2006时 ,semester_year ='2006' 结果false,不是 NULL,Count在值是NULL的时候是不统计个数的,

(count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,

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

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