MySQL: Функция ROW_NUMBER()

Функция ROW_NUMBER(): это мощное средство для присвоения уникальных номеров строкам в результирующем наборе данных. Она была введена в MySQL начиная с версии 8.0 и относится к категории оконных функций, позволяющих динамически управлять порядком следования строк.

Как работает 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.

Автор:  Вчера, 10:03 am