sql >> Databáze >  >> RDS >> Mysql

Jak najít n-tou pozici v MySQL?

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.

  1. Funkce MySQL RAND() – Generování náhodného čísla v MySQL

  2. Implementace společného indikátoru výkonu MS SQL Server

  3. Oficiální technický blog Microsoft Access je nyní online!

  4. Vytvořte entitu místnosti pro tabulku, která má pole s datovým typem LONG ve Sqlite