Чтобы не натыкаться на возможные разновидности значений в столбцах, которые может использовать 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 с 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
На этот раз отдельно проставились значения для «Маши» и отдельно для «Васи«.
Информационные ссылки
Оконные функции — https://postgrespro.ru/docs/postgrespro/15/tutorial-window
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Официальный сайт клиента DBeaver для СУБД PostgreSQL — https://dbeaver.io