Muchas veces necesita encontrar el rango nth en MySQL. Por ejemplo, encontrar el tercer puesto en una clase de estudiantes. Estudiantes clasificados por puntuación. Para encontrar el rango n en MySQL, primero clasificaremos los registros. Luego filtramos el rango n en MySQL. Aquí hay una consulta que puede usar. Simplemente reemplace el nombre de la tabla puntuaciones y nombres de columna id, score.
Encuentra el rango n en MySQL según el valor creciente
Ejemplo:
CREATE TABLE score (id int, score int); INSERT INTO scores VALUES (1, 35),(2, 10),(3,30),(4,22),(5,20),(6,18),(7,36); Scores: +----+------+ | id | score| +----+------+ | 1 | 35 | | 2 | 10 | | 3 | 30 | | 4 | 22 | | 5 | 20 | | 6 | 18 | | 7 | 36 | +----+------+
Aquí encontramos el registro con rango 3 . La siguiente consulta clasifica los registros en función de la puntuación creciente. Luego filtra el registro con rango 3:
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
El
(SELECT @curRank := 0)
parte permite la inicialización de variables sin necesidad de un comando SET por separado.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Encuentra el rango n en MySQL basado en el valor decreciente
Si desea encontrar el rango n en MySQL según el orden decreciente de puntajes, simplemente agregue la palabra clave DESC en la consulta. Aquí encontramos el registro con rango 3.
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score DESC) WHERE rank=3;
Resultado:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Puede aplicar los métodos anteriores para obtener el rango n para cualquier tipo de métrica, como salario, número de empleados, etc.