Referencia de funciones

RANK

Devuelve el rango de una fila en la partición de la ventana, es decir, su puesto en el orden de ORDER BY.

MySQL 8.4
RANK()

Valor devuelto

Número entero (BIGINT UNSIGNED), el puesto de la fila; los valores iguales comparten puesto y los siguientes puestos se saltan: 1, 2, 2, 4

Ejemplos

Rango por estado con huecos

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

Puestos por salario en los departamentos

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

Detalles

Sin ORDER BY, todas las filas de la partición reciben el rango 1. Para seleccionar las filas de los primeros puestos, calcula el rango en una subconsulta y filtra en la consulta externa: en el WHERE de la misma consulta no puedes usar funciones de ventana. A diferencia de ROW_NUMBER, las filas con valores iguales reciben el mismo puesto, así que la condición «rango = 1» devuelve todos los líderes.

Véase también

Dónde aprenderlo