最近工作中,需要做数据的统计汇总工作,发现count()函数内可以加条件计数,sql模板如下 :
SELECT
a.office_id,
count( a.id ) '总监测',
count( a.report_result = 'E' OR NULL ) '异常监测'
FROM
table1 a
WHERE
a.begintime >= '2021-10-01'
AND a.begintime <= '2021-12-20'
GROUP BY
a.office_id
至于为什么条件里要加上 OR NULL,原因如下:
因为当'report_result'不是'E'时 ,'report_result'='E' 结果false 不是 NULL,count在值是NULL是不统计数, (count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即count(null)==0,因此前者单引号内不管输入什么值都会统计出所有记录数)至于加上or NULL , 很像其他编程里的or运算符,第一个表达式是true就是不执行or后面的表达式,第一个表达式是false 执行or后面的表达式 。 当'report_result'不为'E'时'report_result' = 'E' or NULL 的结果是NULL,count才不会统计上这条记录数。
输出结果: