Много пъти трябва да намерите n-ти ранг в MySQL. Например намерете 3-ти ранг в клас ученици. Студентите, класирани по точки. За да намерим n-ти ранг в MySQL, първо ще класираме записите. След това филтрираме n-тия ранг в MySQL. Ето една заявка, която можете да използвате. Просто заменете името на таблицата резултати и имена на колони id, score.
Намерете n-ти ранг в MySQL въз основа на нарастваща стойност
Пример:
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 | +----+------+
Тук намираме записа сранг 3 . Следната заявка класира записите въз основа на нарастващ резултат. След това филтрира записа с ранг 3:
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
(SELECT @curRank := 0)
част позволява инициализация на променливата, без да се изисква отделна команда SET.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Намерете n-ти ранг в MySQL въз основа на намаляваща стойност
Ако искате да намерите n-ти ранг в MySQL въз основа на низходящ ред на резултатите, просто добавете ключовата дума DESC в заявката. Тук намираме записа с ранг 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;
Резултат:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Можете да приложите горните методи, за да получите n-ти ранг за всякакъв вид метрика като заплата, брой служители и т.н.