一尘不染

在WHERE子句中使用mysql SUM()

mysql

假设我有这张桌子

id | cash 
1    200
2    301
3    101
4    700

我想返回第一行,其中所有先前现金的总和大于某个值:

因此,例如,如果我要返回第一行,其中所有先前现金的总和都大于500,则应返回到第3行

如何使用mysql语句执行此操作?

使用WHERE SUM(cash) > 500 不起作用


阅读 877

收藏
2020-05-17

共1个答案

一尘不染

您只能在HAVING子句中使用聚合进行比较:

GROUP BY ...
  HAVING SUM(cash) > 500

HAVING子句要求您定义GROUP BY子句。

要获得第一行,其中所有先前现金的总和都大于某个值,请使用:

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子句中引用其别名。

2020-05-17