我有一個表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) –