有限制的MySQL计数

有限制的MySQL计数,mysql,sql,limit,sql-limit,Mysql,Sql,Limit,Sql Limit,我要做的是对一列求和,但也要计算它求和的行数,限制不超过5行。所以我的问题是: SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5 我所期望的是最多5行的计数(*)(我不能假设在我的代码逻辑中它总是5,因为它可能有不到5个答案),分数之和最多为5行 相反,我得到的似乎是匹配行的总数(其中用户为1)作为计数,以及这些行的分数总和。无论我设置限制1还是限制5甚至限制50,数字都不会改变 我相信在这种情况下,这种方法会奏效 SE

我要做的是对一列求和,但也要计算它求和的行数,限制不超过5行。所以我的问题是:

SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5
我所期望的是最多5行的计数(*)(我不能假设在我的代码逻辑中它总是5,因为它可能有不到5个答案),分数之和最多为5行

相反,我得到的似乎是匹配行的总数(其中用户为1)作为计数,以及这些行的分数总和。无论我设置
限制1
还是
限制5
甚至
限制50
,数字都不会改变

我相信在这种情况下,这种方法会奏效

SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a
但是对于这样一个简单的查询来说,这似乎有点复杂,因为它是在一个高流量的脚本中,我希望它尽可能有性能


我错过什么了吗?几年前我确实发现了似乎与这个“问题”有关的问题,但我假设它实际上不是一个bug?

这实际上是您的查询工作方式,是一种正常行为。使用
LIMIT
将不限制计数或总和,而仅限制返回的行。因此,查询将返回
n
行,如
LIMIT
子句中所述。由于查询实际上只返回一行,因此应用(非零)限制对结果没有影响


但是,您的第二个查询将按预期工作,并且是解决此问题的既定方法。

LIMIT 5
将最多返回5行<代码>选择计数(*),来自答案的总和(分数)将返回1行。1 < 5. 在第二个查询中,您的回答是正确的。是的@ta.speot.is,我想我只是需要有人来验证我没有做傻事。我可以发誓有一个更简单的查询来做我需要的事情,但显然不是。在嵌套查询中使用
select 1
而不是
select*
,理论上可以减少内存使用。只要SO计时器允许,我会接受你的答案。但你是对的,我想我也需要别人来解释,这样我才知道我没有做傻事。第二个查询确实有效,而且似乎是唯一的方法。