Да, возвращаемое значение самой функции "count" всегда является ненулевым целым числом без исключения.
Сказав это, вы можете быть более заинтересованы в возвращениизначение вашего запроса , которое на самом деле является результирующим набором .Если это так, то вам просто нужно решить, включает ли ваш запрос предложение «group by».
A несгруппированный запрос с агрегатными функциями, такими как
select count(*), sum(*), max(*), min(*) from table
создает результирующий набор с единственной записью , содержащей возвращаемое значение (я) агрегатной функции (ей).В этом случае ваш результирующий набор всегда будет содержать ровно одну запись со столбцами, содержащими возвращаемые значения любых агрегатных функций, которые вы включили.В этой единственной записи возвращаемое значение count всегда будет ненулевым целым числом, в то время как возвращаемые значения других агрегатных функций, таких как min, max и sum, могут быть нулевыми.В приведенном выше примере возвращаемая запись может быть «ноль, ноль, ноль, ноль», но никогда не будет «ноль, ноль, ноль, ноль», поскольку count никогда не возвращает ноль.Таким образом, если вы вызываете только «count», то этот столбец в этой возвращаемой записи всегда будет содержать ненулевое возвращаемое значение 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;
Так что, независимо от того, звоните вы в счетчик, мин, макс или сумму, важно понимать не только возвратзначения отдельных агрегатных функций, а также «возвращаемое значение» самого запроса и что содержит этот результирующий набор.