ELSE 0はCOUNT CASE WHENステートメントに含まれていますか?


10

違いは何だCOUNT(CASE WHEN [Column A] = ____ THEN 1 END とはCOUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END

私は前者を使用してきましたが、これまでのところ違いを見ていません。追加する理由は何ELSE 0ですか-SQL Serverが誤ってカウントする状況はありますか?


4
2番目の例では、正しいものにするために、COUNTではなくSUMを使用する必要があります。
Olivier Jacot-Descombes

回答:


23

最初のケースでは、1とNULLを数えるだけで十分です。(CASEステートメントのどの条件も一致せず、ELSE句がない場合、NULLが返されます。)NULLはカウントされません。2番目のケースでは、1と0です。0をカウントできます。

簡単な例:

CREATE TABLE #CountMe (Col1 char(1));

INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');

SELECT
    COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
    COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;

出力:

ここに画像の説明を入力してください


9

else part to caseステートメントを指定していない場合は、デフォルトでNULLが返されます。countはNULL以外の値をカウントするため、これは良いことです。ケースから何かを返す場合、それが1、0、2のいずれであっても問題ありません。常に1としてカウントされます。

countの代わりにsumを使用する場合は、1または0を返す必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.