PostgreSQL | OVER по всем записям (строкам) таблицы (запроса)

PostgreSQL | OVER по всем записям (строкам) таблицы (запроса)

Чтобы не натыкаться на возможные разновидности значений в столбцах, которые может использовать OVER нужно написать «OVER()«. Просто слово «OVER» и две круглые скобки после него «()«.

В таком виде PostgreSQL будет проставлять нужный результат агрегирующей функции для всех записей (строк таблицы/строк запроса) с учётом какого-либо столбца.

-- Пример таблицы № 1
select *
   , sum(w) over() as sum_w
   , sum(e) over() as sum_e
from (
   select 'маша' as q, 1 as w, 1 as e
   union
   select 'маша', 1, 2
   union
   select 'маша', 1, 3
   union
   select 'маша', 2, 1
   union
   select 'маша', 2, 10
   union
   select 'вася', 100, 50
) as qwe

Визуальный вид таблицы № 1

Таблица с OVER по всем записям - PostgreSQL
Таблица с OVER по всем записям — PostgreSQL

 

Использование OVER с partition в PostgreSQL

В противном случае, если использовать выражение «OVER(partition by q)«, тогда проставление результата агрегирующей функции будет ограничено значениями в столбце. В нашем случае будет два результата для агрегирующей функции «sum()«.

-- Пример таблицы № 2
select *
, sum(w) over(partition by q) as sum_w
, sum(e) over(partition by q) as sum_e
from (
select 'маша' as q, 1 as w, 1 as e
union
select 'маша', 1, 2
union
select 'маша', 1, 3
union
select 'маша', 2, 1
union
select 'маша', 2, 10
union
select 'вася', 100, 50
union
select 'вася', 5, 6
) as qwe

Визуальный вид таблицы № 2

Таблица с OVER и двумя разделами партициями - PostgreSQL
Таблица с OVER и двумя разделами партициями — PostgreSQL

На этот раз отдельно проставились значения для «Маши» и отдельно для «Васи«.

 

Информационные ссылки

Оконные функции — https://postgrespro.ru/docs/postgrespro/15/tutorial-window

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://www.postgresql.org

Официальный сайт клиента DBeaver для СУБД PostgreSQLhttps://dbeaver.io