Mange gange har du brug for at finde nth rank i MySQL. Find fx 3. rang i en klasse af elever. Elever rangeret efter score. For at finde n'te rang i MySQL rangerer vi først posterne. Så filtrerer vi den n'te rang i MySQL. Her er en forespørgsel, du kan bruge. Bare udskift tabelnavnet score og kolonnenavne id, score.
Find nr. nr. i MySQL baseret på stigende værdi
Eksempel:
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 | +----+------+
Her finder vi rekorden med rang 3 . Følgende forespørgsel rangerer posterne baseret på stigende score. Derefter filtrerer 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 tillader den variable initialisering uden at kræve en separat SET-kommando.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Find n'te rangering i MySQL baseret på faldende værdi
Hvis du ønsker at finde n. rang i MySQL baseret på faldende rækkefølge af score, skal du blot tilføje søgeordet DESC i forespørgslen. Her finder vi rekorden med rang 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 anvende ovenstående metoder til at få n'te rang for enhver form for metrik såsom løn, medarbejderantal osv.