← К оглавлению занятия
⚡ Минимум для запоминания
OVER() — задаёт окно для оконной функции.
PARTITION BY column — делит строки на разделы.
ORDER BY column внутри OVER — сортирует строки в окне.
- Базовый шаблон:
function() OVER (PARTITION BY ... ORDER BY ...) AS alias.
Синтаксис
-- Общий шаблон оконной функции
SELECT
column1,
window_function() OVER (
PARTITION BY column2
ORDER BY column3
) AS result_column
FROM table_name;
Команды / операторы / функции
| Конструкция | Описание | Пример |
OVER() |
Определяет окно строк для оконной функции. |
COUNT(*) OVER () |
PARTITION BY |
Разделяет строки на независимые разделы (группы). |
OVER (PARTITION BY department_id) |
ORDER BY в OVER |
Задаёт порядок строк внутри окна. |
OVER (ORDER BY salary DESC) |
COUNT() OVER |
Считает количество строк в окне. |
COUNT(*) OVER (PARTITION BY department_id) |
SUM() OVER |
Считает сумму значений в окне. |
SUM(amount) OVER (PARTITION BY year) |
AVG() OVER |
Считает среднее значение в окне. |
AVG(salary) OVER (PARTITION BY department_id) |
Структура выражения OVER
window_function() OVER (
[PARTITION BY partition_column1, partition_column2, ...]
[ORDER BY sort_column1 [ASC | DESC], sort_column2 [ASC | DESC], ...]
)
PARTITION BY необязателен. Если его нет, окно охватывает все строки результата.
ORDER BY внутри OVER необязателен, но нужен для функций, чувствительных к порядку.
- Разделов и столбцов сортировки может быть несколько.
Полный справочник
→ Справочник SQL