sql >> Databasteknik >  >> RDS >> Mysql

Hur hittar man n:e ranking i MySQL?

Många gånger behöver du hitta n:e ranking i MySQL. Hitta till exempel 3:e rang i en klass med elever. Eleverna rankas efter poäng. För att hitta n:e rankningen i MySQL, rangordnar vi först posterna. Sedan filtrerar vi den n:e rankningen i MySQL. Här är en fråga du kan använda. Byt bara ut tabellnamnet poäng och kolumnnamn id, poäng.

Hitta n:e ranking i MySQL baserat på ökande värde

Exempel:

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 |
+----+------+

Här hittar vi rekordet med ranking 3 . Följande fråga rangordnar posterna baserat på ökande poäng. Sedan filtrerar 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 tillåter variabelinitiering utan att behöva ett separat SET-kommando.

Result:
+----+------+------+
| id | score| rank |
+----+------+------+
| 5  |   20 |    3 |
+----+------+------+
1 row in set (0.0 sec)

Hitta n:e ranking i MySQL baserat på minskande värde

Om du vill hitta n:e ranking i MySQL baserat på minskande poängordning, lägg bara till nyckelordet DESC i frågan. Här hittar vi rekordet med plats 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 använda ovanstående metoder för att få n:e ranking för alla slags mätvärden som lön, antal anställda, etc.

  1. använd en variabel för tabellnamn i mysql sproc

  2. Snabbare sätt att infoga, via skript, i Oracle?

  3. Oracle, PDO_OCI vs OCI8

  4. Wordnet sqlite Synonymer och exempel