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;