通过窗口函数进行过滤导致Postgresql
发布时间:2020-12-13 16:28:38 所属栏目:百科 来源:网络整理
导读:好的,最初这只是我们与我的一个朋友的笑话,但它变成了有趣的技术问题:) 我有以下的表格: CREATE TABLE stuff( id serial PRIMARY KEY,volume integer NOT NULL DEFAULT 0,priority smallint NOT NULL DEFAULT 0,); 该表包含所有我的东西的记录,具有相应的卷
好的,最初这只是我们与我的一个朋友的笑话,但它变成了有趣的技术问题:)
我有以下的表格: 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |