Как работает ROW_NUMBER()?
Эта функция присваивает последовательные номера строкам в порядке их сортировки, указанном оператором ORDER BY . После завершения сортировки каждая строка получает уникальное целочисленное значение, начиная с единицы.
Синтаксис функции выглядит так:
ROW_NUMBER() OVER ([PARTITION BY column_expression] ORDER BY sort_column)
Параметры:
PARTITION BY
: необязательная секция, которая группирует строки по указанному полю или выражению. Внутри каждого раздела нумерация начинается заново.ORDER BY
: обязательная секция, определяющая порядок сортировки строк.
Примеры использования
Рассмотрим таблицу сотрудников (
employees
) с полями id
, name
, department_id
и salary
. Мы хотим присвоить уникальные номера сотрудникам внутри каждого отдела.
SELECT id, name, department_id, salary,
ROW_NUMBER() OVER(PARTITION BY department_id ORDER BY salary DESC) AS rn
FROM employees;
Результатом будет набор данных, где каждому сотруднику назначен номер в пределах своего отдела, упорядоченный по убыванию зарплаты.
Особенности использования ROW_NUMBER()
- Каждая строка гарантированно получит уникальный номер в рамках секции
PARTITION BY
. - Номер назначается только после полного выполнения этапа сортировки (
ORDER BY
). - При изменении порядка сортировки изменяется и нумерация строк.
Когда использовать ROW_NUMBER()?
- Для формирования уникальной идентификации строк внутри группы.
- При построении сложных отчетов, где важна строгая позиция строки в группе.
- В операциях пагинации и лимитирования данных.
Функция ROW_NUMBER() значительно упрощает разработку сложных запросов и улучшает управление данными в базе MySQL.