Подтвердить что ты не робот

COUNT (*) всегда возвращает результат?

Если я запускаю запрос, например:

SELECT COUNT(*) as num FROM table WHERE x = 'y'

Будет ли он всегда возвращать результат, даже если запрос не соответствует какой-либо записи? Или мне нужно проверить и убедиться, что в результате возвращается строка?

4b9b3361

Ответ 1

Да, потому что он агрегат и возвращает ноль. Если вы не добавите GROUP BY, в этом случае нет результата, потому что нет группы...

MAX/SUM и т.д. вернет NULL, если вы не добавите GROUP BY, а затем не строк. Только COUNT возвращает число без результатов

Изменить, немного поздно: SUM вернет NULL, как MAX

Изменить, май 2013: это относится ко всем основным СУБД. Я полагаю, согласно стандарту ANSI

Ответ 2

Да, возвращаемое значение самой функции "count" всегда является целым числом, отличным от нуля, без исключения.

Сказав это, вас может больше заинтересовать возвращаемое значение вашего запроса, которое на самом деле является результирующим набором. В этом случае вам просто нужно подумать, включает ли ваш запрос предложение "group by".

A негрупповой запрос с агрегатными функциями, такими как

select count(*), sum(*), max(*), min(*) from table

создает результирующий набор с единственной записью, содержащей возвращаемые значения совокупной функции. В этом случае ваш результирующий набор всегда будет иметь ровно одну запись с столбцами, содержащими возвращаемые значения любых встроенных функций, которые вы включили. Внутри этой одиночной записи возвращаемое значение count всегда будет целым числом, отличным от нуля, тогда как возвращаемые значения других агрегатных функций, таких как min, max и sum, могут быть нулевыми. В приведенном выше примере возвращаемая запись может быть "zero, null, null, null", но никогда не будет "null, null, null, null", поскольку count никогда не возвращает null. Поэтому, если вы вызываете только "счет", тогда один столбец в одной возвращенной записи всегда будет содержать ненулевое возвращаемое значение count; поэтому вы можете быть уверены, что скалярное возвращаемое значение вашего счетного запроса всегда будет целым числом, отличным от нуля.

С другой стороны, сгруппированный запрос с совокупными функциями, такими как

select count(*), sum(*), max(*), min(*) from table group by column

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

Протестируйте его в таблице без записей, чтобы увидеть результаты:

create table #t (c int);
select COUNT(c), MIN(c), MAX(c), SUM(c) from #t; --returns one record {0, null, null, null}
select COUNT(c), MIN(c), MAX(c), SUM(c) from #t group by c; --returns no records
drop table #t;

Итак, независимо от того, вызываете ли вы счет, min, max или sum, важно понимать не только возвращаемые значения отдельных агрегатных функций, но также и "возвращаемое значение" самого запроса и какой набор результатов содержит.

Ответ 3

Агрегатная функция Count() всегда возвращает значение

Ответ 4

Да, он вернет числовое значение

Ответ 5

Да, в таких случаях он вернет 0.

Ответ 6

Всегда будет строка результата:

| COUNT(*) |
------------
| 0        |

если совпадений нет.

Кстати, я бы предпочел считать только первичный ключ вместо *.

Ответ 7

Если запись не будет выполнена, счетчик вернет 0. (так что да, count всегда возвращает результат, если у вас нет синтаксической ошибки)