MySQL 提供 SUM() 聚合函数来计算列中值的总和。虽然 SUM() 通常在 SELECT 查询中用于获取聚合结果,但它也可以在具有一定限制的 WHERE 子句中使用。
在给定场景中,目标是检索表中的第一行,其中前几行的现金值总和超过指定阈值。在 WHERE 子句中使用“WHERE SUM(cash) > 500”不会产生所需的结果,因为在此上下文中无法直接比较聚合。
要实现所需的功能,应在中使用 HAVING 子句与 GROUP BY 子句结合使用。但是,HAVING 子句需要 GROUP BY 子句定义。因此,在这种情况下,分组没有意义。
解决方案是在 WHERE 子句中使用嵌套子查询。这种方法允许我们计算每行的现金值的运行总计,然后在比较中使用该值。以下查询完成此操作:
<code class="sql">SELECT y.id, y.cash FROM ( SELECT t.id, t.cash, ( SELECT SUM(x.cash) FROM TABLE x WHERE x.id <= t.id ) AS running_total FROM TABLE t ORDER BY t.id ) y WHERE y.running_total > 500 ORDER BY y.id LIMIT 1;</code>
通过在 WHERE 子句中引用列别名“running_total”,我们可以将运行总计与指定阈值进行比较。 LIMIT 子句确保仅返回满足条件的第一行。
以上是如何在 MySQL 中检索值总和超过阈值的第一行?的详细内容。更多信息请关注PHP中文网其他相关文章!