Справочник по функциям

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;
member_namestatusstatus_rank
Lela Quinceydaughter1
Annie Quinceydaughter1
Wednesday Addamsdaughter1
Headley Quinceyfather4
Ernest Forrestfather4
Flavia Quinceymother6
Constance Forrestmother6
Andie Quinceyson8

Места по зарплате в отделах

MySQL 8.4
SELECT department_id,
	name,
	salary,
	RANK() OVER (
		PARTITION BY department_id
		ORDER BY salary DESC
	) AS salary_rank
FROM employees;
department_idnamesalarysalary_rank
1Dmitry Sokolov2200001
1Anna Ivanova2100002
1Igor Petrov1950003
1Pavel Smirnov1800004
1Elena Kozlova1750005
2Irina Volkova2050001
2Olga Novikova2000002
2Maxim Morozov1600003
2Nikita Popov1600003
3Tatiana Lebedeva1700001

Подробности

Без ORDER BY все строки раздела получают ранг 1. Чтобы выбрать строки с первыми местами, посчитайте ранг в подзапросе и отфильтруйте во внешнем запросе: в WHERE того же запроса оконные функции использовать нельзя. В отличие от ROW_NUMBER, строки с одинаковыми значениями получают одно место, поэтому условие «ранг = 1» вернёт всех лидеров.

Смотрите также

Где изучить