如何选择值超过给定总和的所有行?

时间:2018-02-16 05:37:23

标签: postgresql

假设我有一张桌子

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

1 个答案:

答案 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