MySQL COUNT() и nulls
Я правильно говорю:
COUNT(expr)
WHERE expr IS NOT *
Будет считать только ненулевые?
Будет ли COUNT(*)
подсчитывать все строки? И что, если все столбцы нулевые?
Ответы
Ответ 1
Правильный. COUNT (*) - это все строки в таблице, COUNT (выражение) - это то, где выражение не является ненулевым.
Если все столбцы имеют значение NULL (что указывает на то, что у вас нет первичного ключа, поэтому это не должно происходить в нормализованной базе данных), COUNT (*) по-прежнему возвращает все вставленные строки. Просто не делай этого.
Вы можете думать о символе * как о значении "в таблице", а не "в любом столбце".
Это описано в Справочном руководстве MySQL.
Ответ 2
Если вы хотите также подсчитать NULL, попробуйте
SELECT COUNT(IFNULL(col, 1)) FROM table;
Ответ 3
только что отмечен:
выберите count (*)
возвращает 1 с одной записью, заполненной NULL
выберите счетчик (поле)
возвращает 0.
Я не вижу точки в записи со значениями NULL. Такая запись не должна существовать.
Ответ 4
count(*)
не для непустых столбцов, это просто способ запросить подсчет всех строк. Примерно эквивалентен count(1)
.
Ответ 5
Используя MySQL, я нашел этот простой способ:
SELECT count(ifnull(col,1)) FROM table WHERE col IS NULL;
Этот способ не будет работать:
SELECT count(col) FROM table WHERE col IS NULL;