SQL 中的 count(1) 是什么意思?

What does count(1) in SQL mean?

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>) 计算 <expr> 的每个非 null 值。这里给它一个常量值 1,它永远不会是 null - 所以它计算所有行。

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