SQL选择COUNT问题

时间:2012-06-14 06:46:20

标签: sql sql-server count

我有一张桌子

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

这两个查询之间的区别是什么?

5 个答案:

答案 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。