请帮我在下面选择查询
来源表
name Amount
-----------
A 2
B 3
C 2
D 7
如果limit为5,则结果表应为
name Amount
-----------
A 2
B 3
如果limit是8则结果表
name Amount
-----------
A 2
B 3
C 2
答案 0 :(得分:4)
您可以使用窗口功能来实现此目的:
select name,
amount
from (
select t.*,
sum(amount) over (
order by name
) s
from your_table t
) t
where s <= 8;
分析函数sum
将根据给定的订单order by name
逐行汇总。
一旦你使用这个找到了直到给定行的总和,你可以使用一个简单的where子句来过滤结果,以找到行数,其中金额的总和低于或等于给定的限制。
有关此主题的更多信息: