【发布时间】:2011-06-29 21:01:25
【问题描述】:
好的,最初这只是我们和我朋友的一个玩笑,但后来变成了有趣的技术问题:)
我有以下stuff 表:
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
如果我删除此过滤器,总列会正确计算,结果会正确排序,但 所有 内容都会被选中,这不是我想要的。
那么,我该怎么做呢?如何只选择可以放入包中的物品?
【问题讨论】:
标签: sql postgresql window-functions