假设我有这张桌子
id | cash 1 200 2 301 3 101 4 700
我想返回第一行,其中所有先前现金的总和大于某个值:
因此,例如,如果我要返回第一行,其中所有先前现金的总和都大于500,则应返回到第3行
如何使用mysql语句执行此操作?
使用WHERE SUM(cash) > 500 不起作用
WHERE SUM(cash) > 500
您只能在HAVING子句中使用聚合进行比较:
GROUP BY ... HAVING SUM(cash) > 500
该HAVING子句要求您定义GROUP BY子句。
HAVING
要获得第一行,其中所有先前现金的总和都大于某个值,请使用:
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
由于聚合函数发生在子查询中,因此可以在WHERE子句中引用其别名。