带有LIMIT的MySQL COUNT

时间:2013-06-10 09:36:18

标签: mysql sql limit sql-limit

我想要做的是SUM一列,但也要COUNT它总和的行数,限制不超过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,这似乎与这个“问题”有关,但我认为它实际上并不是一个错误?

1 个答案:

答案 0 :(得分:42)

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

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