ELSE 0 บอกเป็นนัยในกรณี COUNT ของฉันเมื่อใด


10

ความแตกต่างระหว่างCOUNT(CASE WHEN [Column A] = ____ THEN 1 END และCOUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 ENDคืออะไร?

ฉันใช้อดีตและฉันไม่ได้เห็นความแตกต่างในตอนนี้ เหตุผลในการเพิ่มELSE 0- มีสถานการณ์ที่ SQL Server จะนับอย่างไม่ถูกต้องหรือไม่


4
ตัวอย่างที่สองควรใช้ SUM แทน COUNT เพื่อให้ถูกต้อง
Olivier Jacot-Descombes

คำตอบ:


23

เพียงพอในกรณีแรกที่คุณนับ 1s & NULL (NULL ถูกส่งคืนหากไม่มีเงื่อนไขใด ๆ ในการจับคู่คำสั่ง CASE และไม่มีส่วนคำสั่งอื่น ๆ ) NULL จะไม่ถูกนับ ในกรณีที่สอง 1 และ 0 0 สามารถนับได้

ตัวอย่างด่วน:

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;

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


9

หากคุณไม่ได้ระบุส่วนอื่นของข้อความสั่ง case มันจะส่งคืนค่า NULL ตามค่าเริ่มต้นและในกรณีของคุณที่เป็นสิ่งที่ดีเพราะการนับจะนับค่าที่ไม่ใช่ NULL หากคุณส่งคืนสิ่งอื่นจากเคสมันไม่สำคัญว่าจะเป็น 1, 0 หรือ 2 มันจะถูกนับเป็น 1 เสมอ

หากคุณจะใช้ผลรวมแทนการนับคุณควรส่งคืน 1 หรือ 0

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.