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(*)
。
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(*)
。