当前位置: 首页 > 面试题库 >

带有LIMIT的MySQL COUNT

糜鸿风
2023-03-14
问题内容

我想做的是对一列求和,但也要对它求和的行数进行计数,最大不超过5行。所以我的查询是:

SELECT COUNT(*), SUM(score) FROM answers WHERE user=1 LIMIT 5

我期望返回的是最多5个的COUNT(*)(我不能认为在我的代码逻辑中它将始终为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

但这对于这样一个简单的查询似乎有些费解,并且由于它是在高流量脚本中,所以我希望它尽可能地表现出色。

我想念什么吗?我确实从几年前就发现了这个错误报告,该报告似乎与这个“问题”有关,但是我假设它实际上不是错误吗?


问题答案:

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

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



 类似资料:
  • 问题内容: $pageMin = (($page * 10)-10); 似乎占位符不适用于LIMIT … 当我将pageMin连接起来时,例如: 甚至 使用占位符,它不会返回任何结果,为什么? 谢谢你的帮忙。 问题答案: 当您将参数数组传递给它们时,它们将被视为字符串,并且limit是一个int值。只需将bindValue与int类型一起使用即可。

  • 问题内容: 我想将表中的行从1001开始更新到下一个1000。 我尝试了以下查询: 这给了我语法错误。它是否正确?我在这里犯任何错误吗? 我们可以这样限制更新吗? 另外,我尝试更新的行的数据类型为INTEGER的列p_id具有Null值。因此,我什至无法使用以下查询进行更新: 我上面的查询正确吗? 要做到这一点怎么办? 问题答案: 处理null时,不匹配null值。您可以使用或 可以与但只能一起使

  • 问题内容: 是否可以在WHERE子句中使用LIMIT x? 如果是这样,怎么办? 我正在尝试这样做: 但我收到以下错误: 问题答案: 应该在之后。 句法 :

  • 问题内容: 这个问题已经在这里有了答案 : 如何在LIMIT子句中应用bindValue方法? (10个答案) 5年前关闭。 使用PDO(我正在使用具有Apache 2.2.21,PHP最高为5.3.6和MySQL 5.5.9的MAMP 2.0.5)准备的语句,如果我使用 有用。 我在MySQL的错误中看到这是先前版本中的错误,但我不知道是否仍要解决。 如果仍然存在问题,是否可以通过另一种方式选择

  • 例如,如果我有一个活动表,它的排序键是一个日期字段(updatedAt),并且它有一百万行。如果我执行一个限制为10的扫描(为了得到最近的10个活动),我显然会得到10行,但我会因为读取100万行而被收费吗?成本是我主要关心的问题。

  • 我是AWS DynamoDB的新手,阅读了留档后,我不能100%确定在SCAN操作中使用“限制”参数时成本计算会发生什么。 我知道应该设计表,以便主要使用查询操作,并且扫描将扫描整个表,从而消耗大量的读取容量。我还知道FilterExpression不会影响扫描整个表的成本,但会过滤整个扫描后返回的内容,如果扫描的项目总数超过1 MB的最大数据集大小限制,则会停止扫描并返回结果。 我不确定的是,“