оконная функция над вычисляемым столбцом - PullRequest
1 голос
/ 29 марта 2019

Я пишу запрос, который выглядит примерно так:

select parent.id,
       parent.date, 
       sum(child.amount) filter (where child.is_ok) as child_sum,
       sum(sum(child.amount) filter (where child.is_ok)) over (order by parent.date)
  from parent
  left join child on parent.id = child.parent_id
 group by parent.id, parent.date
 order by parent.date desc

Как вы можете видеть, я использую оконную функцию для получения промежуточного итога более child.amount.

Вопрос в том, существует ли какой-либо стандартный или нестандартный способ ссылки на child_sum без копирования его выражения внутри оконной функции sum?

Я использую Postgres 10.

1 Ответ

1 голос
/ 29 марта 2019

Вы можете использовать подзапрос:

SELECT id, date, child_sum,
       sum(child_sum) over (order by date)
FROM (SELECT parent.id,
             parent.date, 
             sum(child.amount) FILTER (WHERE child.is_ok) AS child_sum
      FROM parent
      LEFT JOIN child ON parent.id = child.parent_id
      GROUP BY parent.id, parent.date
     ) AS subq
ORDER BY date DESC;
...