Почему в COUNT (имя столбца) не учитываются нули
4 James Hatton [2014-10-14 22:28:00]
Итак, я наткнулся на что-то на днях на работе, пытаясь подсчитать количество нулевых значений после запуска импорта.
Итак, я сделал:
select COUNT(columnname) from table
WHERE ColumnName is null
Который не считал нули...
Тогда я сделал,
select COUNT(*) from table
WHERE ColumnName is null
Который дал мне счет.
Итак, что-то, что меня беспокоило, почему именно это не учитывает нулевые значения.
Я рассмотрел этот вопрос (наряду с хорошим поиском в Google...):
В SQL, какая разница между count (column) и count (*)?,
и пока он говорит мне, что COUNT(columnname)
не учитывает нули, я хотел бы точно знать , почему nulls не учитываются с помощью этого метода?
Большое спасибо, Джеймс.
null sql sql-server count
6 ответов
8 Решение Jeffrey Wieder [2014-10-14 22:32:00]
COUNT
подсчитывает значения, поскольку значение null не является значением, которое не подсчитывается.
Если вы хотите подсчитать все нулевые значения, вы можете сделать что-то вроде этого:
SELECT COUNT(ID) as NotNull, SUM(CASE WHEN ID IS NULL then 1 else 0 end) as NullCount
5 fthiella [2014-10-14 23:00:00]
Почему в COUNT(columnname)
не учитываются нули??
COUNT(*)
будет считать все строки
COUNT(columnname)
будет считать все строки, за исключением тех строк, где columnname IS NULL.
И какая причина?
Это просто, что функция COUNT()
предназначена для работы таким образом: значения NULL обрабатываются иначе, чем другие значения, потому что NULL можно считать заполнитель для "неизвестных" значений, поэтому очень часто вы хотите просто подсчитать строки которые имеют реальное значение и пропускают строки, которые не имеют.
Подсчет строк, которые не имеют значения, встречается реже, а SQL не предоставляет для него функции. Но вы можете легко вычислить его:
SELECT
COUNT(*) As rows,
COUNT(columnname) AS non_null_count,
COUNT(*) - COUNT(columnname) AS null_count
FROM
yourtable
2 Jonny Axelsson [2014-10-14 22:46:00]
Если вы вместо этого считаете (1), вы не будете подвержены этому фильтру, что считать в состоянии.
1 Hard Tacos [2014-10-14 22:34:00]
COUNT подсчитывает только реальные значения... null не является значением. Итак:
COUNT (*) используется, если вы хотите включить значения, не имеющие значения.
Если вы хотите просто подсчитать количество не нулевых значений, вы должны использовать COUNT (имя столбца)
0 Siddharth Jain [2019-01-26 04:53:00]
Как отметил в своем ответе @Jeffrey Wieder, count считает фактические значения и, поскольку null не являются значениями, он игнорирует их. Но если вы хотите посчитать все строки для столбца, включая нулевые значения, вы можете сделать -
Select count(column_name isnull) from table_name
Это в PostgreSQL. Если кто-нибудь может пролить больше света на то, почему это работает, это было бы здорово. Насколько я понимаю, упоминание "пусто" в подсчете заставляет считать даже нулевые значения. Пожалуйста, исправьте меня, если я ошибаюсь.
0 R Loomas [2017-04-04 15:43:00]
Я не уверен, что накладные расходы вызывает беспокойство, но это происходит со мной, почему count (*)? Вы можете просто подсчитать любое поле, где вы точно знаете, что будут данные (например, поле ID) и добавить WHERE (columnName IS NULL).
выберите count (ID) как NullCount из вашей таблицы, где columnName имеет значение null