Мне действительно нужно объяснение для этого. Скажем, у вас есть следующая таблица:SQL count case else 0 vs null
Columns:
id int(11) AI PK
user_id int(11)
is_complete int(11)
В приведенной выше таблице is_complete
может быть 1
или 0
Теперь вы хотите, чтобы сделать некоторый подсчет так вы создаете следующее SQL
заявления:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE 0
END) AS not_complete
Сказать, что это будет:
(что неверно)
Теперь вы измените точно такое же заявление:
COUNT(CASE
WHEN is_complete = 0 THEN 1
ELSE null
END) AS not_complete
Примечание Айв изменил 0
к null
И вы получите следующий результат:
После некоторого интенсивного тестирования вы обнаружите, что 1. неверное утверждение действительно учитывает все, что бы ни было.
Мой вопрос: почему?
Поскольку рассчитывает каждое значение, что это не пустой, то, как это работает. И '0' не является нулевым,' 1' не является нулевым, а каждое другое значение, но 'NULL' будет подсчитываться. Если вы хотите использовать 'THEN 1 ELSE 0 END', используйте' SUM' вместо 'COUNT' – Lamak
So See Sum() ... – Strawberry
почему вы не используете count (*) из таблицы where is_complete = 0 – Pirate