好的,起初这只是和我的一个朋友开玩笑,但后来变成了有趣的技术问题:)
我有下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
如果我删除此过滤器,则会正确计算总列,对结果进行正确排序,但 所有 内容都会被选中,这不是我想要的。
那么,我该怎么做呢?如何仅选择可以放入袋子的物品?
我没有使用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;
问题内容: 这是该问题的后续内容,其中对我的查询进行了改进,使其使用窗口函数而不是联接内的聚合。虽然查询现在快得多,但我发现结果不正确。 我需要在x年尾随时间框架上执行计算。例如,每行的计算方法是:十年前移至当前行,然后除以结果。为了简单起见,我们将使用1年。 SQL Fiddle对此问题进行了解答。(Postgres 9.6) 作为一个简单的例子,和用于可像这样分别计算: 要做到这一点 ,每行
我有以下数据: 现在我想以这样一种方式过滤数据,我可以删除第6行和第7行,对于特定的uid,我想在代码中只保留一行值为'c' 所以预期的数据应该是: 我使用的窗口函数如下所示:
我有一个包含以下数据的pyspark dataframe:
本文向大家介绍PostgreSQL数据库中窗口函数的语法与使用,包括了PostgreSQL数据库中窗口函数的语法与使用的使用技巧和注意事项,需要的朋友参考一下 什么是窗口函数? 一个窗口函数在一系列与当前行有某种关联的表行上执行一种计算。这与一个聚集函数所完成的计算有可比之处。但是窗口函数并不会使多行被聚集成一个单独的输出行,这与通常的非窗口聚集函数不同。取而代之,行保留它们独立的标识。在这些现象
问题内容: 我有一个涉及Postgresql数据库的任务。我对SQL不太有经验。 我有一张桌子,上面有每周贸易产品的营业额。 对于每周,提供以下信息:产品,周数,每周营业额(可能是正数,也可能是负数,具体取决于天气是购买还是出售了更多产品)。我已经添加了一个列,每个星期都有期末余额。我在表中的第一周所有产品的期末余额(week_number= 0),而其他所有周均为“ null”。下面提供了一些示