我有一个表SQL SELECT 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
这两个查询有什么区别?
我有一个表SQL SELECT 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
这两个查询有什么区别?
区别在您选择的字段中。
计数时COUNT(*)
将考虑NULL值(计算返回的所有行)。
计数时COUNT(num)
不计入NULL值(计数所有非空字段)。
这是SQL标准的行为,无论DBMS使用
Source。看COUNT(DISTINCT EXPR,[EXPR ...])
count(*)
返回行数count(num)
返回行数num
不是null
。将您最后的查询更改为select count(*) from test where num is null
以获得您期望的结果。
考虑上面给出的输出,查询计数(NUM)的结果应该是2.
是的,这也是我的烦恼。但为什么输出为0. – yogi
如果查询不包含where子句只选择那些“where num is null”的行,那么这将是真的 –
在第二种情况下第一计数值被消除并且那么子句出现在图片中。而在第一种情况下,当您使用*
行时,不会消除。
如果你指望它包含一个空科尔,你想被列入计数与空行不是使用
Count(ISNULL(col,0))
ISNULL()是非标准SQL,可能会或可能不会工作,具体取决于OP使用的RDBMS。 –
这个问题的一个可能重复http://stackoverflow.com/questions/3003457/count-vs-countcolumn-name-which-more-correct – praveen
可能的重复[在SQL中,count(column)和count(*)之间的区别是什么?](http://stackoverflow.com/questions/ 59294/in-sql-whats-the-difference-between-countcolumn-and-count) –