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
使用“结束”创建包含累积和的列。然后选择累积总和小于用户输入的行。使用“结束”创建包含累积总和的列。然后选择累计总和小于用户输入的行。