我有一个表,它有一个名为“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;