RANK
Возвращает ранг строки в разделе окна — её место по порядку ORDER BY.
MySQL 8.4
RANK()Возвращаемое значение
Целое число (BIGINT UNSIGNED) — место строки; одинаковые значения делят место, следующие места пропускаются: 1, 2, 2, 4
Примеры
Ранг по статусу с пропусками
MySQL 8.4
SELECT member_name,
status,
RANK() OVER (
ORDER BY status
) AS status_rank
FROM FamilyMembers;Места по зарплате в отделах
MySQL 8.4
SELECT department_id,
name,
salary,
RANK() OVER (
PARTITION BY department_id
ORDER BY salary DESC
) AS salary_rank
FROM employees;Подробности
Без ORDER BY все строки раздела получают ранг 1. Чтобы выбрать строки с первыми местами, посчитайте ранг в подзапросе и отфильтруйте во внешнем запросе: в WHERE того же запроса оконные функции использовать нельзя. В отличие от ROW_NUMBER, строки с одинаковыми значениями получают одно место, поэтому условие «ранг = 1» вернёт всех лидеров.