如果我运行一个查询,如:COUNT(*)总是返回结果吗?
SELECT COUNT(*) as num FROM table WHERE x = 'y'
将它总是返回一个结果,即使在查询不匹配任何记录?或者我需要验证并确保返回一行作为结果?
如果我运行一个查询,如:COUNT(*)总是返回结果吗?
SELECT COUNT(*) as num FROM table WHERE x = 'y'
将它总是返回一个结果,即使在查询不匹配任何记录?或者我需要验证并确保返回一行作为结果?
是的,因为它是一个总量和返回零。 除非您添加GROUP BY,在没有组的情况下没有结果...
MAX/SUM等将返回NULL,除非您添加GROUP BY,否则无行。 只算返回任何结果
编辑,有点晚了一些:SUM将返回NULL像MAX
编辑,2013年5月:这适用于所有主要的RDBMS。我猜根据ANSI标准
它说我可以在11分钟内接受,wtf ... – 2010-03-31 10:35:57
SUM()函数怎么样,它们会返回0还是NULL? – 2010-03-31 10:36:50
@Click Upvote:对不起,我没有回答。 SUM给出像MAX一样的NULL值。只有COUNT返回0 – gbn 2011-01-18 06:04:09
是它会返回一个数字总是
聚合函数COUNT()总是返回值
是的,它会在这种情况下返回0。
总会有结果的一排这样的:
| COUNT(*) |
------------
| 0 |
如果没有匹配。
顺便说一句,我宁愿只计算主键而不是*
。
'COUNT(*)'与一般的COUNT(列)不同。计数列将检查不同的值,而不是所有的记录。当然,当你计算你的主键时,你将得到所有的记录,因为主键必须是唯一的,但这不会比COUNT(*)'快,并且可能会更慢(除非MySQL自动优化回COUNT(* )')。 – 2010-03-31 17:27:03
@Ty W - “计数列检查不同的值”。不,这是不正确的,除非你指定'distinct'关键字。它计算的值不是'NULL' – 2011-01-18 13:40:08
如果没有记录匹配计数将返回0 (所以是的,总是指望返回结果,除非你有一些语法错误)
是的,返回值的“count”函数本身始终是一个非空整数,没有例外。
说了这么多,你可能会更感兴趣的是你查询,这实际上是一个结果集的返回值。如果是这样的话,那么你只需要考虑你的查询是否包含“group by”子句。与集合函数
甲非分组查询像
select count(*), sum(*), max(*), min(*) from table
产生与含有骨料(多个)功能的返回值(一个或多个)单个记录的结果集。在这种情况下,您的结果集总是只有一条记录,列中包含您包含的任何聚合函数的返回值。在这个单独的记录中,count的返回值将始终为非空整数,而其他聚合函数(如min,max和sum)的返回值可能为null。在上面的例子中,你返回的记录可能是“零,空,空,空”,但永远不会是“null,null,null,null”,因为count永远不会返回null。所以如果你只调用“count”,那么返回的那条记录中的那一列将总是包含count的非空返回值;因此您可以放心,计数查询的标量返回值将始终为非空整数。
在另一方面,与集合函数的分组查询像
select count(*), sum(*), max(*), min(*) from table group by column
产生具有零个或多个记录的结果集,其中每个记录包含聚合函数的返回值( s)为每个组确定。在这种情况下,如果没有标识的组,则不会运行集合函数的组,函数将永远不会运行,并且“查询返回值”将是一个完全没有记录的空集。
测试出来的,没有记录的表看到的结果:
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;
所以,不管你调用计数,最小值,最大值或总和,重要的是不仅可以了解的返回值的单个集合函数,还包括查询本身的“返回值”以及结果集包含的内容。
谢谢!只是想让你知道在MySQL上我不能执行SUM(*)。 – CMCDragonkai 2015-12-24 03:38:42
难以测试吗? – 2010-03-31 10:33:53
@col yea :)',' – 2010-03-31 10:34:36
@col没有尝试,只是想在这里,我想他希望观众“点击Upvote”他的问题。 – raj 2010-03-31 10:37:13