Postgresql 在使用 sum() over((

Postgresql selecting specific rows when using sum() over((

我有一个员工列表,有id和salary,我想找到按id排序的前n名员工,累计薪水总和为x。 可以用 sum() over () 作为 cumsum 添加累计和 但如果我使用: 其中 cumsum < x 那不行。

您不能在 wherehaving 中使用 window 函数结果。使用子查询或 CTE 来完成此操作:

with accumulate as (
  select id, salary, sum(salary) over (order by id) as cum_salary
    from employees
)
select * from accumulate
 where cum_salary < x;