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

Postgresql 如何选择其值超过给定总和的所有行?,postgresql,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 = r

假设我有一张桌子

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

您可以使用一种称为窗口函数的方法来实现这一点。基本上,它让你有一个运行总数。选择行,直到总和超过所需的总数

例如,尝试以下方法:

select name, val
  from (
    select name, val, (sum(val) over (order by val, name)) as total
    from vals
  ) as t
  where total - val < 25

您可以使用一种称为窗口函数的方法来实现这一点。基本上,它让你有一个运行总数。选择行,直到总和超过所需的总数

例如,尝试以下方法:

select name, val
  from (
    select name, val, (sum(val) over (order by val, name)) as total
    from vals
  ) as t
  where total - val < 25
使用“结束”创建包含累积和的列。然后选择累积总和小于用户输入的行。使用“结束”创建包含累积总和的列。然后选择累计总和小于用户输入的行。