Чи вказується ELSE 0 у моєму викладі COUNT CASE WHEN?


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, щоб бути правильним.
Олів'є Якот-Дескомб

Відповіді:


23

Досить просто, у першому випадку ви рахуєте 1 і NULL. (NULL повертається, якщо жодна з умов у операторі CASE не відповідає та немає пункту ELSE.) 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 за замовчуванням, а у вашому випадку це добре, оскільки count буде рахувати не-NULL значення. Якщо ви повернете щось інше з справи, не має значення, якщо це 1, 0 або 2, воно завжди буде зараховуватися як 1.

Якщо ви б використали суму замість рахунку, вам слід повернути 1 або 0.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.