1

私はテーブルを持っています

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つのクエリの違いは何ですか??

4

5 に答える 5

3

違いは選択したフィールドにあります。

NULL 値をカウントするCOUNT(*)場合は考慮されます (返されたすべての行をカウントします)。

NULL 値をカウントするCOUNT(num)場合は考慮されません (すべての非 null フィールドをカウントします)。

これは、DBMS が使用するものに関係なく、SQL の標準的な動作です。

ソース。COUNT(DISTINCT expr,[expr...]) を見てください

于 2012-06-14T06:48:45.840 に答える
0

count(*)は行数を返し、 ではないcount(num)行数を返します。期待する結果が得られるように、最後のクエリを に変更します。numnullselect count(*) from test where num is null

于 2012-06-14T06:48:03.843 に答える
0

Count(*)行数をカウントし、列 numの非 nullCOUNT(num)の数をカウントします。

于 2012-06-14T06:48:13.747 に答える
0

2番目のケースでは、最初のカウント値が削除され、次に where 句が表示されます。最初のケースでは、行を null で使用している場合*は排除されません。

null を含む coll を当てにしていて、null を含む行をカウントに含めたい場合は、使用するよりも

 Count(ISNULL(col,0))
于 2012-06-14T06:52:13.370 に答える
-1

上記の出力を考慮すると、クエリ count(num) の結果は 2 になるはずです。

于 2012-06-14T06:51:48.460 に答える