假设我有一张桌子
name | val
------------
a |10
b |10
c |20
d |30
我的用户输入为25
。如何选择所有行,以使val
的总和超过25
一行。因此,对于25的用户输入,我将返回前三行,这些行给出值40
。我尝试做的事情的等效代码是
total = 0
user_input = 25
while total < user_input and rows_by_val_asc_iterator.has_next():
row = rows_by_val_asc_iterator.next()
total = total + row.val
答案 0 :(得分:2)
你可以使用一种叫做“窗口函数”的东西来做到这一点。基本上它可以让你有一个总计。选择行直到总和超过所需总数。
例如,尝试这样的事情:
select name, val
from (
select name, val, (sum(val) over (order by val, name)) as total
from vals
) as t
where total - val < 25