ELSE 0 có được ngụ ý trong câu lệnh COUNT CASE WHEN của tôi không?


10

Sự khác biệt giữa COUNT(CASE WHEN [Column A] = ____ THEN 1 END và là COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 ENDgì?

Tôi đã sử dụng trước đây và tôi đã không thấy sự khác biệt cho đến nay; lý do để thêm ELSE 0- có những tình huống mà SQL Server sẽ đếm không chính xác?


4
Ví dụ thứ hai nên sử dụng SUM thay vì COUNT để chính xác.
Olivier Jacot-Descombes

Câu trả lời:


23

Đơn giản là đủ trong trường hợp đầu tiên bạn đang đếm 1s & NULL. (NULL được trả về nếu không có điều kiện nào trong câu lệnh CASE khớp và không có mệnh đề ELSE.) NULL không được tính. Trong trường hợp thứ hai 1 và 0. 0 là có thể được tính.

Ví dụ nhanh:

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;

Đầu ra:

nhập mô tả hình ảnh ở đây


9

Nếu bạn không chỉ định phần khác cho câu lệnh tình huống, thì nó sẽ trả về NULL theo mặc định và trong trường hợp của bạn đó là một điều tốt, bởi vì đếm sẽ tính các giá trị không phải NULL. Nếu bạn trả lại bất cứ điều gì khác từ trường hợp, nó không thành vấn đề nếu đó là 1, 0 hoặc 2, nó sẽ luôn được tính là 1.

Nếu bạn sẽ sử dụng tổng thay vì đếm, thì bạn nên trả về 1 hoặc 0.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.