0
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?

4

1 回答 1

1

基本上,count(1)产生与 : 相同的结果,count(*)也就是说,它计算group by子句定义的组中的记录数。

为什么?count(<expr>)计算 的每个非null<expr>。在这里,它被赋予一个常数值,1即从不null- 所以它计算所有行。

我不会推荐count(1);检查每一行的无效性需要为仅计算所有行的数据库做更多的工作。一些数据库可能会优化(count(1)因为count(*)很明显,这个固定表达式永远不会是null),但是当您已经可以优化自己时,为什么还要麻烦呢?只需count(*)始终如一地使用。

于 2020-09-11T23:01:52.250 回答