在 WHERE 子句中使用 MySQL SUM() 函数进行行检索
MySQL 允许用户在子查询内执行聚合计算并将其用作条件用于 WHERE 子句中的行选择。但是,了解在这种情况下使用聚合函数的局限性非常重要。
考虑以下场景:您有一个包含 id 和 cash 列的表,并且您想要检索总和的第一行之前的所有现金价值超过特定阈值。
示例表:
id | cash |
---|---|
1 | 200 |
2 | 301 |
3 | 101 |
4 | 700 |
期望结果:
对于输入阈值为 500,预期结果为第 3 行,因为第 1 行和第 2 行的现金值总和 (200 301 = 501) 超过阈值。
错误方法:
尝试使用 WHERE SUM(cash) >
解决方案:
要克服此限制,您可以在中使用 HAVING 子句与子查询结合使用,计算每行的现金运行总额。
<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>
说明:
此方法可确保准确识别所有先前现金值总和超过阈值的第一行.
以上是如何使用 MySQL 的 SUM() 函数根据先前值的总和检索行?的详细内容。更多信息请关注PHP中文网其他相关文章!