Mnohokrát potřebujete najít n-tou pozici v MySQL. Např. najít 3. místo ve třídě studentů. Studenti seřazeni podle skóre. Abychom našli n-tou pozici v MySQL, nejprve seřadíme záznamy. Poté vyfiltrujeme n-tou pozici v MySQL. Zde je dotaz, který můžete použít. Stačí nahradit název tabulky skóre a názvy sloupců id, skóre.
Najděte n-tou pozici v MySQL na základě rostoucí hodnoty
Příklad:
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 | +----+------+
Zde najdeme záznam s rankem 3 . Následující dotaz seřadí záznamy na základě zvyšujícího se skóre. Poté filtruje záznam s hodností 3:
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
The
(SELECT @curRank := 0)
část umožňuje inicializaci proměnné bez nutnosti samostatného příkazu SET.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Najděte n-tou pozici v MySQL na základě klesající hodnoty
Pokud chcete najít n-tou pozici v MySQL na základě klesajícího pořadí skóre, přidejte do dotazu klíčové slovo DESC. Zde najdeme záznam s hodností 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;
Výsledek:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Výše uvedené metody můžete použít k získání n-tého pořadí pro jakýkoli druh metriky, jako je plat, počet zaměstnanců atd.