Często trzeba znaleźć n-tą pozycję w MySQL. Np. znajdź 3 miejsce w klasie uczniów. Uczniowie uszeregowani według punktów. Aby znaleźć n-tą pozycję w MySQL, najpierw uszeregujemy rekordy. Następnie filtrujemy n-tą pozycję w MySQL. Oto zapytanie, którego możesz użyć. Wystarczy zastąpić nazwę tabeli scores i nazwy kolumn id, wynik.
Znajdź n-tą pozycję w MySQL na podstawie rosnącej wartości
Przykład:
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 | +----+------+
Tutaj znajdujemy rekord z rankingiem 3 . Poniższe zapytanie klasyfikuje rekordy na podstawie rosnącego wyniku. Następnie filtruje rekord z 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;
(SELECT @curRank := 0)
część umożliwia inicjalizację zmiennej bez konieczności oddzielnego polecenia SET.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Znajdź n-tą pozycję w MySQL na podstawie malejącej wartości
Jeśli chcesz znaleźć n-tą pozycję w MySQL na podstawie malejącej kolejności wyników, po prostu dodaj słowo kluczowe DESC w zapytaniu. Tutaj znajdujemy rekord z 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;
Wynik:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Możesz zastosować powyższe metody, aby uzyskać n-tą pozycję dla dowolnego rodzaju miernika, takiego jak wynagrodzenie, liczba pracowników itp.