SQL中的count()、sum()函数内加条件
最近在代码中有需要做页⾯统计数据总数,于是就按照条件规矩的表连接分组查询,先查出总数,然后对分组过
后的数据进⾏单个查询。写完就跑了⼀下,发现查询速度有点慢(数据暂时还不多),想着以后数据多的话,页
⾯会不会很慢,能不能⼀个sql,把所有的数量都查出来。这就⽤到了count()函数内加条件计数,测试了⼀下,
数据正确,sql如下 :
select  a.卫⽣院顺序号,count(a.ID) as 体检总数,
count(case when a.是否⾼⾎压='是' then 1 else null end)as ⾼⾎压总数,
count(case when a.是否糖尿病='是' then 1 else null end)as 糖尿病总数,
count(case when a.是否脑卒中='是' then 1 else null end)as 脑卒中总数,
count(case when a.是否冠⼼病='是' then 1 else null end)as 冠⼼病总数
from  表  a  where YEAR(a.tjrq) = DATEPART(year, GETDATE())  GROUP BY a.机构号
还有⼀种⽅法就是
SELECT
COUNT(1) AS '总数',
COUNT (xjzt = '1' OR NULL) AS '状态1',
COUNT (xjzt = '2' OR NULL) AS '状态2'
FROM
t_table
WHERE
sfsc = 0
GROUP BY
'字段1',
'字段2'
⾄于为什么要or null    如count(xjzt= '1' or NULL) 这部分 为什么要加上or NULL 直接count(xjzt= '1' )有什么问题吗?不就是要
xjzt= '1' 的数据吗,为什么要计算NULL的数据
答案:
因为 当 xjzt 不是 1时 ,xjzt= '1' 结果false 不是 NULL,
Count在 值是NULL是 不统计数, (count('任意内容')都会统计出所有记录数,因为count只有在遇见null时不计数,即
count(null)==0,因此前者单引号内不管输⼊什么值都会统计出所有记录数)⾄于加上or NULL , 很像其他编程⾥的or运算符,第⼀个表
达式是true就是不执⾏or后⾯的表达式,第⼀个表达式是false 执⾏or后⾯的表达式 。当xjzt 不为1时xjzt= '1' or NULL 的结果是
sql中select是什么意思NULL,Count才不会统计上这条记录数
下⾯sql语句意思为按机构分组查询每个机构中肝功能(肝功能其中包含⾎清⾕丙、⾕草、总胆红素,每个项⽬
的超过指标即为异常)和⼼电图异常⼈数
select 组织机构,
sum(case when  ((case when xqgb='' then 0  when Cast(xqgb as decimal(10,2))>40 then 1 else 0 end)+(case when xqgc='' then 0 when Cast(xqgc as decimal(10 sum(case when ⼼电图='' or ⼼电图 is null then 0 when ⼼电图 like '%1%' then 0 else 1 end) as ⼼电图
from  表_健康体检表  group by 组织机构