【发布时间】:2013-06-05 22:18:22
【问题描述】:
我想要做的是对一列求和,但还要对它求和的行数进行计数,限制为不超过 5 行。所以我的查询是:
SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5
我期望返回的是 COUNT(*) 最多为 5(我不能假设它在我的代码逻辑中始终为 5,因为它可能有少于 5 个答案),以及 最多 5行。
相反,我似乎得到的是匹配行的总数(其中用户为 1)作为计数,以及这些行的得分总和。无论我输入LIMIT 1、LIMIT 5 还是LIMIT 50,数字都不会改变。
我相信在这种情况下会起作用的是这个
SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a
但是对于这样一个简单的查询来说,这似乎有点令人费解,而且由于它在一个高流量脚本中,我希望它尽可能地高效。
我错过了什么吗?几年前我确实找到了this bug report,这似乎与这个“问题”有关,但我假设它实际上不是一个错误?
【问题讨论】:
-
LIMIT 5最多返回 5 行。SELECT COUNT(*), SUM(score) FROM answers将返回 1 行。 1 -
是的@ta.speot.is,我想我只是需要有人来验证我没有做愚蠢的事情。可以发誓有一个更简单的查询来做我需要的事情,但显然不是。
-
在嵌套查询中使用
select 1而不是select *理论上可以减少内存使用