sql >> Database teknologi >  >> RDS >> Mysql

Hvordan finder man nth rank i MySQL?

Mange gange har du brug for at finde nth rank i MySQL. Find fx 3. rang i en klasse af elever. Elever rangeret efter score. For at finde n'te rang i MySQL rangerer vi først posterne. Så filtrerer vi den n'te rang i MySQL. Her er en forespørgsel, du kan bruge. Bare udskift tabelnavnet score og kolonnenavne id, score.

Find nr. nr. i MySQL baseret på stigende værdi

Eksempel:

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

Her finder vi rekorden med rang 3 . Følgende forespørgsel rangerer posterne baseret på stigende score. Derefter filtrerer 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 tillader den variable initialisering uden at kræve en separat SET-kommando.

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

Find n'te rangering i MySQL baseret på faldende værdi

Hvis du ønsker at finde n. rang i MySQL baseret på faldende rækkefølge af score, skal du blot tilføje søgeordet DESC i forespørgslen. Her finder vi rekorden med 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;

Resultat:

+----+------+------+
| id | score| rank |
+----+------+------+
| 3  |   30 |    3 |
+----+------+------+
1 row in set (0.0 sec)

Du kan anvende ovenstående metoder til at få n'te rang for enhver form for metrik såsom løn, medarbejderantal osv.

  1. Generer et sæt eller en sekvens uden loops – del 3

  2. Hvordan udlæser man dagnummer uge og ugedag ved brug af Oracle SQL?

  3. Hvad er det modsatte af GROUP_CONCAT i MySQL?

  4. Konverter 'datetime' til 'datetime offset' i SQL Server (T-SQL-eksempler)