【问题标题】:SQL select COUNT issueSQL 选择 COUNT 问题
【发布时间】:2012-06-17 04:28:35
【问题描述】:

我有一张桌子

num
----
NULL
NULL
NULL
NULL
55
NULL
NULL
NULL
99

我写的时候

select COUNT(*) 
from tbl
where num is null

输出为 7

但是当我写的时候

select COUNT(num) 
from tbl
where num is null

输出为 0

这两个查询有什么区别??

【问题讨论】:

标签: sql sql-server count


【解决方案1】:

不同之处在于您选择的字段。

在计算COUNT(*) 时会考虑 NULL 值(计算所有返回的行)。

在计算COUNT(num) 时,不考虑 NULL 值(计算所有非空字段)。

这是 SQL 中的标准行为,无论 DBMS 使用什么

Source。看看 COUNT(DISTINCT expr,[expr...])

【讨论】:

    【解决方案2】:

    count(*) 返回行数,count(num) 返回行数,其中num 不是null。将您的最后一个查询更改为 select count(*) from test where num is null 以获得您期望的结果。

    【讨论】:

      【解决方案3】:

      在第二种情况下,首先消除计数值,然后出现 where 子句。而在第一种情况下,当您使用 * 时,带有 null 的行不会被消除。

      如果您指望一个包含 null 的 coll,并且您希望将 null 的行包含在计数中而不是使用

       Count(ISNULL(col,0))
      

      【讨论】:

      • ISNULL() 是非标准 SQL,根据 OP 使用的 RDBMS 可能会或可能不会起作用。
      【解决方案4】:

      Count(*)统计行数,COUNT(num)统计column num中not-null值的个数。

      【讨论】:

      • 但是num 列中有两个NOT-NULL 值,所以当输出为 0 时,你不认为它应该是 2 吗??
      • 如果你没有添加这个 where 子句就会出现这种情况:where num is null :-)
      【解决方案5】:

      考虑到上面给出的输出,查询count(num)的结果应该是2。

      【讨论】:

      • 是的,这也是困扰我的地方。但是为什么输出是0。
      • 如果查询不包含 where 子句,只选择“where num is null”的行,那将是正确的
      猜你喜欢
      • 2011-09-13
      • 2019-05-13
      • 1970-01-01
      • 2021-11-29
      • 2010-12-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多