我有一个表,它有一个名为“capacity”的数字列。我想选择它们的总容量总和不大于X的第一行,就像这个查询

select * from table where sum(capacity )<X

但是我知道我不能在where部分中使用聚合函数。那么这个问题还有其他的方法吗?
以下是一些样本数据
id| capacity
1 | 12
2 | 13.5
3 | 15

我想用id的顺序列出它们的总和小于26的行,所以这样的查询
 select * from table where sum(capacity )<26 order by id

它必须给我
id| capacity
1 | 12
2 | 13.5

因为12+13.5

最佳答案

您可以使用sum的窗口变量生成一个累积和,然后在where子句中使用它。注意,窗口函数不能直接放在where子句中,因此需要一个子查询:

SELECT   id, capacity
FROM     (SELECT id, capacity, SUM(capacity) OVER (ORDER BY id ASC) AS cum_sum
          FROM   mytable) t
WHERE    cum_sum < 26
ORDER BY id ASC;

09-26 17:01
查看更多