Apakah ELSE 0 tersirat dalam pernyataan COUNT KASUS KAPAN?

10

Apa perbedaan antara COUNT(CASE WHEN [Column A] = ____ THEN 1 END dan COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END?

Saya telah menggunakan yang pertama dan sejauh ini saya belum melihat perbedaannya; apa alasan untuk menambahkan ELSE 0- apakah ada situasi di mana SQL Server akan salah menghitung?

coburne
sumber
4
Contoh kedua harus menggunakan SUM dan bukan COUNT agar benar.
Olivier Jacot-Descombes

Jawaban:

23

Cukup sederhana dalam kasus pertama Anda menghitung 1s & NULLs. (NULL dikembalikan jika tidak ada kondisi dalam pernyataan KASUS yang cocok dan tidak ada klausa ELSE.) NULL tidak dihitung. Dalam kasus kedua 1 dan 0. 0 dapat dihitung.

Contoh cepat:

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;

Keluaran:

masukkan deskripsi gambar di sini

Kenneth Fisher
sumber
9

Jika Anda tidak menentukan bagian lain untuk pernyataan kasus, maka akan mengembalikan NULL secara default, dan dalam kasus Anda itu adalah hal yang baik, karena hitungan akan menghitung nilai-nilai non-NULL. Jika Anda mengembalikan apa pun dari kasing, tidak masalah jika itu 1, 0 atau 2, itu akan selalu dihitung sebagai 1.

Jika Anda akan menggunakan jumlah alih-alih menghitung, maka Anda harus mengembalikan 1 atau 0.

James Z
sumber