我想做的是对一列求和,但也要对它求和的行数进行计数,最大不超过5行。所以我的查询是:
SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5
我期望返回的是最多5个的COUNT(*)(我不能认为在我的代码逻辑中它将始终为5,因为它可能少于5个答案),总和 最多为 5行。
相反,我似乎得到的是匹配行的总数(用户为1)作为计数,以及这些行的得分总和。这些数字不会改变我是否把LIMIT 1或者LIMIT 5甚至是LIMIT 50。
LIMIT 1
LIMIT 5
LIMIT 50
我相信在这种情况下会起作用的是
SELECT COUNT(*), SUM(score) FROM (SELECT * FROM answers WHERE user=1 LIMIT 5) AS a
但这对于这样一个简单的查询似乎有些费解,并且由于它是在高流量脚本中,所以我希望它尽可能地表现出色。
我想念什么吗?我确实从几年前就发现了这个错误报告,该报告似乎与这个“问题”有关,但是我假设它实际上不是错误吗?
这实际上是查询的工作方式,是正常现象。使用LIMIT您将不限制计数或总和,而仅限制返回的行。因此,您的查询将返回n您的LIMIT子句中所述的行。而且由于查询实际上仅返回一行,因此应用(非零)限制对结果没有影响。
LIMIT
n
但是,您的第二个查询将按预期工作,并且是解决此问题的既定方法。