我有一张桌子
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
这两个查询有什么区别??
我有一张桌子
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
这两个查询有什么区别??
不同之处在于您选择的字段。
计算COUNT(*)
NULL 值时会考虑(计算所有返回的行)。
计算COUNT(num)
NULL 值时不考虑(计算所有非空字段)。
这是 SQL 中的标准行为,无论 DBMS 使用什么
来源。看看 COUNT(DISTINCT expr,[expr...])
count(*)
返回行数,count(num)
返回num
不是的行数null
。将您的最后一个查询更改为select count(*) from test where num is null
以获得您期望的结果。
Count(*)
计算行数,COUNT(num)
计算列 num 中非空值的数量。
在第二种情况下,首先消除计数值,然后出现 where 子句。而在第一种情况下,当您使用*
带有 null 的行时,不会被消除。
如果您指望包含 null 的 coll 并且您希望将 null 的行包含在计数中而不是使用
Count(ISNULL(col,0))
考虑到上面给出的输出,查询 count(num) 的结果应该是 2。