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;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;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.