Теория· 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;
Прочитайте урок до конца — прогресс засчитается автоматически