Molte volte è necessario trovare l'ennesima posizione in MySQL. Ad esempio, trova il 3° posto in una classe di studenti. Studenti classificati per punteggio. Per trovare l'ennesima posizione in MySQL, per prima cosa classificheremo i record. Quindi filtriamo l'ennesimo rango in MySQL. Ecco una query che puoi utilizzare. Basta sostituire il nome della tabella punteggi e nomi di colonna id, punteggio.
Trova l'ennesima posizione in MySQL in base al valore crescente
Esempio:
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 | +----+------+
Qui troviamo il record con rank 3 . La query seguente classifica i record in base al punteggio crescente. Quindi filtra il record con il rango 3:
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
Il
(SELECT @curRank := 0)
parte consente l'inizializzazione della variabile senza richiedere un comando SET separato.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Trova l'ennesima posizione in MySQL in base al valore decrescente
Se vuoi trovare l'ennesima posizione in MySQL in base all'ordine decrescente dei punteggi, aggiungi semplicemente la parola chiave DESC nella query. Qui troviamo il record con rango 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;
Risultato:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Puoi applicare i metodi di cui sopra per ottenere l'ennesima posizione per qualsiasi tipo di metrica come stipendio, conteggio dei dipendenti, ecc.