通过窗口函数进行过滤导致Postgresql

前端之家收集整理的这篇文章主要介绍了通过窗口函数进行过滤导致Postgresql前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,最初这只是我们与我的一个朋友的笑话,但它变成了有趣的技术问题:)

我有以下的表格:

CREATE TABLE stuff
(
    id serial PRIMARY KEY,volume integer NOT NULL DEFAULT 0,priority smallint NOT NULL DEFAULT 0,);

该表包含所有我的东西的记录,具有相应的卷和优先级(我需要多少).

我有一个指定体积的袋子,比如说1000.我想从桌子上选择我可以放入一个袋子的所有东西,首先包装最重要的东西.

这似乎是使用窗口函数的情况,所以这里是我想出的查询

select s.*,sum(volume) OVER prevIoUs_rows as total
 from stuff s
 where total < 1000
 WINDOW prevIoUs_rows as
  (ORDER BY priority desc ROWS between UNBOUNDED PRECEDING and CURRENT ROW)
 order by priority desc

然而,问题是Postgres抱怨说:

ERROR:  column "total" does not exist
LINE 3:  where total < 1000

如果我删除此过滤器,总列正确计算,结果正确排序,但所有的东西被选中,这不是我想要的.

那么我该怎么做呢?如何仅选择可以放入包中的物品?

我没有使用Postgresql.不过,我最好的猜测是使用内联视图.
SELECT a.*
FROM (
    SELECT s.*,sum(volume) OVER prevIoUs_rows AS total
    FROM stuff AS s
    WINDOW prevIoUs_rows AS (
         ORDER BY priority desc
         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    )
    ORDER BY priority DESC
) AS a
WHERE a.total < 1000;
原文链接:https://www.f2er.com/postgresql/192703.html

猜你在找的Postgre SQL相关文章