Оконные функцииСредний
PARTITION BY
Делит строки на разделы для оконной функции. Аналог GROUP BY, но без схлопывания строк.
Синтаксис
function() OVER (PARTITION BY col1, col2 ORDER BY col3)
Объяснение
PARTITION BY сбрасывает вычисление оконной функции для каждого раздела. Без PARTITION BY — одно окно на весь результат.
Пример: SUM(salary) OVER (PARTITION BY department) — для каждой строки покажет сумму зарплат её отдела.
Пример
-- Зарплата сотрудника и доля от суммы по отделу SELECT name, department, salary, SUM(salary) OVER (PARTITION BY department) AS dept_total, ROUND(salary * 100.0 / SUM(salary) OVER (PARTITION BY department), 1) AS pct FROM employees;
Связанные термины
Анекдоты по теме
Разработчик: — У меня запрос на 8 таблиц через JOIN, подзапросы, оконные функции внутри WHERE и GROUP BY на хэш с миллиардом строк. Он идёт 3 дня. Как оптимизировать? DBA: — TRUNCATE TABLE карьера_разработчика. И иди в менеджеры.
— Зачем нужен PARTITION BY? — Это GROUP BY для оконных функций. Но без схлопывания. — Пример? — SUM(salary) OVER (PARTITION BY department) — сумма зарплат по отделу для каждой строки.
— Зачем NTILE? — Делит строки на N равных групп. — Например? — NTILE(4) OVER (ORDER BY score) — разбивает пользователей на 4 квартиля. — Первый квартиль — лучшие 25%? — Зависит от ORDER BY. С DESC — да.