SQLLab
Теория· 7 мин· 10 XP

Что такое оконная функция

Оконная функция вычисляет результат по группе строк («окну»), но сохраняет каждую строку в результате. В отличие от GROUP BY — строки не схлопываются.

Синтаксис

sql
функция() OVER (
    [PARTITION BY столбец]
    [ORDER BY столбец]
    [фрейм]
)

Ключевое слово OVER — сигнал PostgreSQL, что это оконная функция.

Простейший пример

sql
-- Сумма всех продаж рядом с каждой строкой
SELECT
    employee,
    sale_month,
    amount,
    SUM(amount) OVER () AS total_sum
FROM sales
ORDER BY sale_month, employee;

OVER () без аргументов — окно = вся таблица.

Сравнение с GROUP BY

GROUP BYОконная функция
Строк в результатепо одной на группувсе исходные строки
Детализациятеряетсясохраняется
Можно видеть исходные полянетда

Зачем это нужно

Классический пример: нужно вывести каждую продажу и долю от общей суммы. С GROUP BY это требует JOIN, с оконной функцией — одна строка кода.

sql
SELECT
    employee,
    amount,
    ROUND(amount / SUM(amount) OVER () * 100, 1) AS pct_of_total
FROM sales;

Прочитайте урок до конца — прогресс засчитается автоматически