900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > SQL中的count() sum()函数内加条件

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

时间:2018-08-05 00:02:11

相关推荐

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.机构号

还有一种方法就是

SELECTCOUNT(1) AS '总数',COUNT (xjzt = '1' OR NULL) AS '状态1',COUNT (xjzt = '2' OR NULL) AS '状态2'FROMt_tableWHEREsfsc = 0GROUP 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 的结果是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,2))>40 then 1 else 0 end)+(case when zdhs='' then 0 when Cast(zdhs as decimal(10,2))>40 then 1 else 0 end))>0 then 1 else 0 end ) as 肝功能,sum(case when 心电图='' or 心电图 is null then 0 when 心电图 like '%1%' then 0 else 1 end) as 心电图from 表_健康体检表 group by 组织机构

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。