Många gånger behöver du hitta n:e ranking i MySQL. Hitta till exempel 3:e rang i en klass med elever. Eleverna rankas efter poäng. För att hitta n:e rankningen i MySQL, rangordnar vi först posterna. Sedan filtrerar vi den n:e rankningen i MySQL. Här är en fråga du kan använda. Byt bara ut tabellnamnet poäng och kolumnnamn id, poäng.
Hitta n:e ranking i MySQL baserat på ökande värde
Exempel:
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 | +----+------+
Här hittar vi rekordet med ranking 3 . Följande fråga rangordnar posterna baserat på ökande poäng. Sedan filtrerar den posten med rang 3:
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
Den
(SELECT @curRank := 0)
del tillåter variabelinitiering utan att behöva ett separat SET-kommando.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Hitta n:e ranking i MySQL baserat på minskande värde
Om du vill hitta n:e ranking i MySQL baserat på minskande poängordning, lägg bara till nyckelordet DESC i frågan. Här hittar vi rekordet med plats 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;
Resultat:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Du kan använda ovanstående metoder för att få n:e ranking för alla slags mätvärden som lön, antal anställda, etc.