ROW_NUMBER
Нумерует строки раздела окна по порядку ORDER BY, начиная с 1.
MySQL 8.1
ROW_NUMBER() OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, нумерация начинается заново в каждом
- ORDER BYнеобязательный
- Порядок, в котором строки нумеруются; без него строки нумеруются в произвольном порядке
Возвращаемое значение
Целое число (BIGINT UNSIGNED) от 1 до числа строк в разделе
Примеры
Нумерация строк по статусу
MySQL 8.1
SELECT member_name,
status,
ROW_NUMBER() OVER (
ORDER BY status
) AS row_num
FROM FamilyMembers;Нумерация внутри каждого статуса
MySQL 8.1
SELECT member_name,
status,
birthday,
ROW_NUMBER() OVER (
PARTITION BY status
ORDER BY birthday
) AS num_in_status
FROM FamilyMembers;Подробности
Строки с одинаковыми значениями ORDER BY всё равно получают разные номера в произвольном порядке. Оконную функцию нельзя использовать в WHERE: чтобы оставить, например, первую строку каждого раздела, посчитайте номер в подзапросе и отфильтруйте во внешнем запросе.