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才不会统计上这条记录数。