ELSE 0 è implicito nella mia dichiarazione COUNT CASE WHEN?


10

Qual è la differenza tra COUNT(CASE WHEN [Column A] = ____ THEN 1 END e COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

Ho usato il primo e non ho visto la differenza finora; qual è la ragione per aggiungere il ELSE 0- ci sono situazioni in cui SQL Server verrà conteggiato in modo errato?


4
Il secondo esempio dovrebbe usare SUM invece di COUNT per essere corretto.
Olivier Jacot-Descombes,

Risposte:


23

Abbastanza semplicemente nel primo caso si contano 1 e NULL. (Viene restituito NULL se nessuna delle condizioni nell'istruzione CASE corrisponde e non esiste una clausola ELSE.) I NULL non vengono conteggiati. Nel secondo caso 1 e 0. 0 possono essere contati.

Esempio rapido:

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;

Produzione:

inserisci qui la descrizione dell'immagine


9

Se non stai specificando la parte else per l'istruzione case, restituirà NULL per impostazione predefinita e, nel tuo caso, è una buona cosa, poiché count conteggerà i valori non NULL. Se restituisci qualcos'altro dal caso, non importa se è 1, 0 o 2, verrà sempre conteggiato come 1.

Se dovessi usare la somma invece del conteggio, dovresti restituire 1 o 0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.