是的,“count”函数本身的返回值始终是非空整数,无一例外。
话虽如此,您可能对您的查询的返回值更感兴趣,它实际上是一个结果集。如果是这种情况,那么您只需考虑您的查询是否包含“group by”子句。
具有聚合函数的非分组查询
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;
因此,无论您调用的是 count、min、max 还是 sum,重要的是不仅要了解各个聚合函数的返回值,还要了解查询本身的“返回值”,以及该结果集是什么包含。