私はテーブルを持っています
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でした
これら2つのクエリの違いは何ですか??
私はテーブルを持っています
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でした
これら2つのクエリの違いは何ですか??
違いは選択したフィールドにあります。
NULL 値をカウントするCOUNT(*)
場合は考慮されます (返されたすべての行をカウントします)。
NULL 値をカウントするCOUNT(num)
場合は考慮されません (すべての非 null フィールドをカウントします)。
これは、DBMS が使用するものに関係なく、SQL の標準的な動作です。
ソース。COUNT(DISTINCT expr,[expr...]) を見てください
count(*)
は行数を返し、 ではないcount(num)
行数を返します。期待する結果が得られるように、最後のクエリを に変更します。num
null
select count(*) from test where num is null
Count(*)
行数をカウントし、列 numの非 null値COUNT(num)
の数をカウントします。
2番目のケースでは、最初のカウント値が削除され、次に where 句が表示されます。最初のケースでは、行を null で使用している場合*
は排除されません。
null を含む coll を当てにしていて、null を含む行をカウントに含めたい場合は、使用するよりも
Count(ISNULL(col,0))
上記の出力を考慮すると、クエリ count(num) の結果は 2 になるはずです。