问题描述
select patientID,count(1)
from dbo (nolock)
where admissiontime between '2020-01-31' and '2020-02-01'
patientID in (0,1)
/*
0 means arthritis
1 means asthma
*/
因此,以上查询用于查找医院针对哮喘和关节炎相关病例提出的要求。
它由patientID
放在一个组中,但是count(1)
意味着它计数了所有PatientID吗?
解决方法
count(1)
基本上产生与count(*)
相同的结果:也就是说,它计算由group by
子句定义的组中的记录数。
为什么? count(<expr>)
对null
的每个非<expr>
值进行计数。这里给它一个常数值1
,它永远不会null
-因此它计算所有行。
我不推荐count(1)
;检查每一行是否为空需要仅计算所有行的数据库工作。某些数据库可能在幕后将count(1)
优化为count(*)
(很明显,这个固定表达式永远不会是null
),但是当您已经可以优化自己时,为什么还要打扰呢?只需持续使用count(*)
。