Ist ELSE 0 in meiner COUNT CASE WHEN-Anweisung impliziert?


10

Was ist der Unterschied zwischen COUNT(CASE WHEN [Column A] = ____ THEN 1 END und COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

Ich habe das erstere verwendet und den Unterschied bisher nicht gesehen. Was ist der Grund für das Hinzufügen von ELSE 0- Gibt es Situationen, in denen SQL Server falsch zählt?


4
Das zweite Beispiel sollte SUM anstelle von COUNT verwenden, um korrekt zu sein.
Olivier Jacot-Descombes

Antworten:


23

Einfach genug, im ersten Fall zählen Sie 1s & NULLs. (NULL wird zurückgegeben, wenn keine der Bedingungen in der CASE-Anweisung übereinstimmt und keine ELSE-Klausel vorhanden ist.) NULL-Werte werden nicht gezählt. Im zweiten Fall Einsen und Nullen. Nullen können gezählt werden.

Kurzes Beispiel:

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;

Ausgabe:

Geben Sie hier die Bildbeschreibung ein


9

Wenn Sie den else-Teil nicht für die case-Anweisung angeben, wird standardmäßig NULL zurückgegeben. In Ihrem Fall ist dies eine gute Sache, da count die Nicht-NULL-Werte zählt. Wenn Sie etwas anderes aus dem Fall zurückgeben, spielt es keine Rolle, ob es 1, 0 oder 2 ist, es wird immer als 1 gezählt.

Wenn Sie sum anstelle von count verwenden würden, sollten Sie 1 oder 0 zurückgeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.