Какая разница между COUNT(CASE WHEN [Column A] = ____ THEN 1 END
а COUNT(CASE WHEN [Column A] = ____ THEN 1 ELSE 0 END
?
Я использовал первый и до сих пор не видел разницы; Что является причиной для добавления ELSE 0
- существуют ли ситуации, когда SQL Server будет неправильно рассчитывать?
sql-server
sql-server-2008
coburne
источник
источник
Ответы:
Достаточно просто в первом случае вы считаете 1 и NULL. (Возвращается NULL, если ни одно из условий в операторе CASE не совпадает, а предложение ELSE отсутствует.) Значения NULL не учитываются. Во втором случае 1 и 0. 0 можно посчитать.
Быстрый пример:
Вывод:
источник
Если вы не указываете инструкцию else для оператора case, он по умолчанию вернет NULL, и в вашем случае это хорошо, потому что count будет считать значения, отличные от NULL. Если вы возвращаете что-то еще из регистра, не имеет значения, равен ли он 1, 0 или 2, он всегда будет учитываться как 1.
Если бы вы использовали сумму вместо количества, вы должны вернуть 1 или 0.
источник