1

我有一张桌子

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

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

4

5 回答 5

3

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

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

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

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

来源。看看 COUNT(DISTINCT expr,[expr...])

于 2012-06-14T06:48:45.840 回答
0

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

于 2012-06-14T06:48:03.843 回答
0

Count(*)计算行数,COUNT(num)计算列 num 中非值的数量。

于 2012-06-14T06:48:13.747 回答
0

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

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

 Count(ISNULL(col,0))
于 2012-06-14T06:52:13.370 回答
-1

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

于 2012-06-14T06:51:48.460 回答