【问题标题】:What does count(1) in SQL mean? [duplicate]SQL中的count(1)是什么意思? [复制]
【发布时间】:2020-12-30 11:02:58
【问题描述】:
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) 是否意味着它计算所有的患者ID?

【问题讨论】:

标签: sql sql-server count sql-null


【解决方案1】:

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

为什么? count(<expr>) 计算<expr> 的每个非null 值。这里给它一个常量值1,它永远不是null - 所以它计算所有行。

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

【讨论】:

  • count(1) 和 count() 都是一样的。 Count(1) 是为了确保没有 NULL 值,但现在 count() 做同样的事情 stackoverflow.com/questions/1221559/count-vs-count1-sql-server docs.microsoft.com/en-us/sql/t-sql/functions/…
  • @MLeblanc “现在”是指“自 1990 年代以来”? :-)
  • 确切地说,使用 count(1) 可以消除语义含义,它说-> 计算表中 (1) 的数量,为什么停在 1?,您可以使用 count(42),count (3),count(4) 也是如此。但是 count(*) -> 计算表中的所有记录。 * 表示“全部”的通配符
  • @AaronBertrand 我在大学(在 2000 年初)被教导 count() 将获取所有行并且只计算至少具有一个非空值的行,并且由于您的table 应该有 PK,做一个 count() 是没有意义的。但我很好奇,看了一下标准的 sql-92、sql-89 和 sql-86,它们都说“如果指定了 COUNT(*),那么结果就是 R 的基数。”。所以,我猜“现在”的意思是“从一开始”:-)
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 2022-12-16
  • 2018-09-25
  • 2013-01-03
  • 2016-08-18
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多