2009-08-30 3 views
12

Я правильно сказал:MySQL COUNT() и обнуляет

COUNT(expr) 
WHERE expr IS NOT * 

будет рассчитывать только дополнительные аннулирует?

Будет COUNT(*) всегда считать все строки? И что, если все столбцы равны нулю?

ответ

16

Исправить. COUNT (*) - это все строки в таблице, COUNT (выражение) - это выражение, в котором выражение не равно null.

Если все столбцы NULL (что указывает на то, что у вас нет первичного ключа, так что это не должно происходить в нормализованной базе данных) COUNT (*) еще возвращает все вставленные строки. Просто не делай этого.

Вы можете представить символ * как значение «в таблице», а не «в любой колонке».

+0

Есть ли способ подсчета аннулирует тоже с COUNT (Expression)? –

+0

Если вы выполняете COUNT (*), то все строки учитываются независимо от содержимого этих строк. Если вы хотите видеть как полные строки *, так и * количество строк со значениями для SomeColumn, сделайте SELECT COUNT (*) как AllRows, COUNT (SomeColumn) как SomeColumnCount. AllRows будет полными строками, возвращаемыми запросом, а SomeColumnCount будет количеством строк, где значение SomeColumn имеет значение. – Godeke

2

count(*) не для непустых столбцов, это просто способ запросить подсчет всех строк. Примерно эквивалентен count(1).

4

только что проверил:

SELECT COUNT (*)

возвращает 1 с одной записью, заполненной нулями

выберите кол (поле)

возвращает 0.

Я не Не видите точку в записи со значениями NULL. Такая запись не должна существовать.

+0

«Я не вижу смысла в записи с значениями NULL». о, это только пришло мне в голову. теперь, когда вы говорите, что я понял, что вы правы, не подумал об этом, когда я спросил. – iceangel89

12

Если вы хотите посчитать NULLs, а также, попробуйте

SELECT COUNT(IFNULL(col, 1)) FROM table; 
+0

Отличное дополнение @Roey –