Как подсчитать значения NULL в MySQL?

Я хочу знать, как я могу найти все значения NULL в базе данных MySQL, например, я пытаюсь отобразить всех пользователей, у которых еще нет среднего.

Вот код MySQL.

SELECT COUNT(average) as num
FROM users
WHERE user_id = '$user_id'
AND average IS_NULL

person abbr    schedule 16.06.2010    source источник
comment
подождите, вы пытаетесь показать пользователей или количество? Ваш вопрос не соответствует вашему образцу.   -  person µBio    schedule 17.06.2010
comment
считает, что ваш ответ был правильным.   -  person abbr    schedule 17.06.2010


Ответы (7)


Более общая версия (которая не зависит от предложения where и, следовательно, ограничивает ваши общие результаты):

SELECT 
    SUM(CASE WHEN average IS NULL THEN 1 ELSE 0 END) As null_num, 
    SUM(CASE WHEN average IS NOT NULL THEN 1 ELSE 0 END) AS not_null_num
FROM users

Это не лучше, чем конкретные запросы, представленные здесь другими ответами, но его можно использовать в ситуациях, когда использование ограничивающего предложения where нецелесообразно (из-за необходимости другой информации)...

person ircmaxell    schedule 17.06.2010
comment
В MySQL синтаксически гораздо проще использовать функцию ISNULL(), чем использовать CASE для этой конкретной цели. - person Air; 09.09.2014
comment
возможно, вы можете использовать предложение IF следующим образом: SELECT SUM(IF(IFNULL(average), 1, 0) AS null_num, SUM(IF(IFNULL(average), 0, 1) AS not_null_num FROM пользователей - person andy; 21.09.2014
comment
СУММА(ISNULL(среднее)) - person todinov; 17.02.2016
comment
Это решение отлично подходит для случаев левого соединения, когда, например, нужно выбрать всех пользователей и их количество непрочитанных сообщений в таблице с левым соединением. Поскольку count(isnull(read_at)) не работает. Приведу один пример. - person David Rinnan; 01.04.2016
comment
Вместо 2-х результатов (null_num и not_null_num) возможно можно использовать один счетчик и группу по этому значению. - person Elizandro - SparcBR; 02.12.2020

Кроме того, вы можете:

Select Count(*) - Count(Average) as NullAverages
From Users
Where user_id = '$user_id' 
person Charles Bretana    schedule 16.06.2010
comment
Мне кажется, что в MySQL я отлично работаю и НАМНОГО быстрее, чем подход "случай, когда". - person ChrisV; 30.04.2013
comment
Часто вам все равно нужны оба значения (общее количество и количество нулей) в вашем коде. Таким образом, это решение является быстрым и гибким для любого варианта использования. - person Ruslan Stelmachenko; 02.09.2020

вы на правильном пути. Удалите «_» из «IS_NULL» и измените «COUNT (среднее)» на «COUNT (1)», и вы получите это.

Для получения дополнительной информации о работе с NULL в MYSQL см. http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

А для работы с IS NULL специально см.

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_is-null

person Jacob    schedule 16.06.2010

Это один вкладыш, который также можно использовать для этой проблемы:

SELECT COUNT(IF(average IS NULL,1,0))
FROM table; 

Это сработало как шарм для меня!

person Prozac    schedule 24.08.2018
comment
Этот ответ очень полезен и помогает в полной мере. - person Yagnesh bhalala; 05.06.2019

Я могу упустить что-то конкретное для mysql, но это будет работать на сервере sql

SELECT COUNT(*) as num
FROM users
WHERE user_id = '$user_id'
AND average IS NULL
person µBio    schedule 16.06.2010

Немного поздно, но вы можете сделать это в MySQL 5.0.51:

SELECT COUNT(*) AS total, COUNT(field1) AS notNullFields1
FROM table
GROUP BY field5, field6

С уважением.

person ATorras    schedule 21.09.2011
comment
На основе dev.mysql.com/doc/ refman/5.0/ru/ - person ATorras; 21.09.2011

person    schedule
comment
count(column) на самом деле не будет считать строку со значением столбца null - person andy; 21.09.2014