在 MySQL WHERE 子句中使用 SUM() 进行查询
使用 MySQL 表时,可能需要根据聚合计算检索行,例如先前值的总和。但是,直接在 WHERE 子句中使用 SUM() 可能不会产生预期结果。
假设您有一个包含“id”和“cash”列的表:
id | cash 1 200 2 301 3 101 4 700
要检索之前所有现金总和超过特定值(例如 500)的第一行,使用 WHERE SUM(cash) > 500 将无法按预期工作。
使用 HAVING 子句的解决方案
MySQL 允许在 HAVING 子句而不是 WHERE 子句中进行聚合比较。要获得所需的结果,您可以使用以下查询:
GROUP BY ... HAVING SUM(cash) > 500
但是,这需要定义 GROUP BY 子句,这可能不是必需的。
使用嵌套带有运行总计的子查询
另一种方法是使用嵌套子查询来计算运行总计,然后将其与 WHERE 子句中的指定值进行比较:
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
In在该查询中,子查询用于计算表中每一行的运行总计。别名 running_total 用于在 WHERE 子句中引用该值。添加 LIMIT 子句以仅返回符合条件的第一行。
这种方法允许直接比较 WHERE 子句中的聚合值,并产生所需的结果,而不需要 GROUP BY 子句。
以上是如何在MySQL中查询先前值之和超过阈值的行?的详细内容。更多信息请关注PHP中文网其他相关文章!