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