ELSE 0, COUNT CASE WHEN ifademde ima ediliyor mu?


10

Arasındaki fark nedir COUNT(CASE WHEN [Column A] = ____ THEN 1 END ve COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

Birincisini kullanıyorum ve şu ana kadar farkı görmedim; ekleyerek nedeni nedir ELSE 0- edilmektedir orada durumlar SQL Server yanlış sayılacaktır nerede?


4
İkinci örnek, doğru olması için COUNT yerine SUM kullanmalıdır.
Olivier Jacot-Descombes

Yanıtlar:


23

Sadece ilk durumda 1s & NULL sayıyorsunuz. (CASE deyimindeki koşullardan hiçbiri eşleşmezse ve ELSE yan tümcesi yoksa NULL döndürülür.) NULL değerleri sayılmaz. İkinci durumda 1'ler ve 0'lar. 0'lar sayılabilir.

Hızlı örnek:

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;

Çıktı:

resim açıklamasını buraya girin


9

Başka bir bölümü büyük / küçük harf ifadesini belirtmezseniz, varsayılan olarak NULL döndürür ve bu durumda iyi bir şeydir, çünkü sayım NULL olmayan değerleri sayar. Davadan başka bir şey döndürürseniz, 1, 0 veya 2 olması önemli değildir, her zaman 1 olarak sayılır.

Count yerine sum kullanırsanız, 1 veya 0 döndürmeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.