Mysql COUNT(*)是否总是返回结果?

Mysql COUNT(*)是否总是返回结果?,mysql,sql,aggregate,Mysql,Sql,Aggregate,如果我运行以下查询: SELECT COUNT(*) as num FROM table WHERE x = 'y' 即使查询与任何记录都不匹配,它也会始终返回结果吗?或者我需要验证并确保返回一行作为结果吗?是的,它将始终返回一个数值聚合函数Count()始终返回值是的,在这种情况下,它将返回0。始终会有这样一行结果: | COUNT(*) | ------------ | 0 | 如果没有匹配项 顺便说一下,我希望只计算主键,而不是*如果没有匹配的记录,则计数将返回0。 (所

如果我运行以下查询:

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

即使查询与任何记录都不匹配,它也会始终返回结果吗?或者我需要验证并确保返回一行作为结果吗?

是的,它将始终返回一个数值

聚合函数Count()始终返回值

是的,在这种情况下,它将返回0。

始终会有这样一行结果:

| COUNT(*) |
------------
| 0        |
如果没有匹配项


顺便说一下,我希望只计算主键,而不是
*

如果没有匹配的记录,则计数将返回0。
(所以是的,count总是返回一个结果,除非您有一些语法错误)

是的,因为它是一个聚合并返回零。 除非您添加GROUP BY,在这种情况下没有结果,因为没有GROUP

MAX/SUM etc将返回NULL,除非您在此之前添加了组,否则没有行。 Only COUNT返回一个数字,表示没有结果

编辑,有点晚:SUM将像MAX一样返回NULL


编辑,2013年5月:这适用于所有主要RDBMS。我猜根据ANSI标准

是的,“count”函数本身的返回值总是一个非空整数,没有例外

话虽如此,您可能对查询的返回值更感兴趣,它实际上是一个结果集。如果是这样的话,那么你只需考虑你的查询是否包含一个“GROUPBY”子句。 具有聚合函数的非分组查询,如

select count(*), sum(*), max(*), min(*) from table
select count(*), sum(*), max(*), min(*) from table group by column
生成包含聚合函数返回值的单个记录的结果集。在这种情况下,结果集始终只有一条记录,其中的列包含所包含的任何聚合函数的返回值。在这个单独的记录中,count的返回值将始终为非null整数,而其他聚合函数(如min、max和sum)的返回值可能为null。在上面的示例中,您返回的记录可能是“零,null,null,null”,但永远不会是“null,null,null,null”,因为count从不返回null。因此,如果只调用“count”,那么返回的记录中的一列将始终包含count的非空返回值;因此,您可以放心,count查询的标量返回值将始终是非空整数

另一方面,分组查询,其聚合函数如下

select count(*), sum(*), max(*), min(*) from table
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,不仅要了解单个聚合函数的返回值,而且要了解查询本身的“返回值”,以及结果集包含的内容,这一点很重要。

@col yea:)',“@col通过不尝试并在此处使用它,我想他希望观众了解“单击向上投票”来回答他的问题。@raj我必须实际创建一个测试表,并构造一个返回0的查询来测试它,而且mysql版本之间可能存在差异,我不知道。像SUM()这样的函数呢,他们会返回0还是NULL?@单击Upvote:对不起,我没有回答。SUM会像MAX一样返回NULL。仅COUNT返回0什么是
COUNT(*)
?另请参见MySQL手册。
COUNT(*)
COUNT(列)不同
通常情况下。计算一列会检查不同的值,而不是所有记录。当然,当您计算主键时,您将获得所有记录,因为主键必须是唯一的,但这不会比
count(*)快,并且可能会慢一些(除非MySQL自动优化回
count(*)
)。@Ty W-对列进行计数可检查是否存在不同的值。不,除非指定
distinct
关键字,否则这不是真的。它对非
NULL
的值进行计数。为了澄清这一点,“count”函数的返回值始终是非空整数,没有例外。请提及“分组依据”,您正在引用包含查询并将“返回值”的主题从“计数函数”更改为“查询的结果集”。非分组计数查询生成包含count返回值的单个记录的结果集。或者,分组计数查询生成一个结果集,其中每个记录都包含一个计数值。在这种情况下,如果没有要运行count的组,则count永远不会运行,“查询返回值”是一个空集。谢谢!只是想让您知道,在MySQL上,我无法执行
SUM(*)