Фильтрация по оконным функциям приводит к Postgresql

Хорошо, изначально это была просто шутка, которую мы поделили с моим другом, но она превратилась в интересный технический вопрос:)

У меня есть следующие вещи table:

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

Если я удалю этот фильтр, итоговый столбец будет правильно рассчитан, результаты будут правильно отсортированы, но будут выбраны все вещи, а это не то, что я хочу.

Так, Как мне это сделать? Как выбрать только те элементы, которые могут поместиться в сумку?

22
задан Maxim Sloyko 18 February 2011 в 14:33
поделиться