Heim > Datenbank > MySQL-Tutorial > Wie kann ich ein Ranking in MySQL ohne eine native RANK-Funktion implementieren?

Wie kann ich ein Ranking in MySQL ohne eine native RANK-Funktion implementieren?

Linda Hamilton
Freigeben: 2025-01-24 05:06:09
Original
350 Leute haben es durchsucht

How Can I Implement Ranking in MySQL Without a Native RANK Function?

Ranking in MySQL implementieren: eine Alternative zur Verwendung von Variablen

MySQL selbst bietet keine vergleichbare RANK-Funktion wie ANSI-Standard-SQL-Abfragen. Es gibt jedoch Alternativen zur Verwendung von Variablen, um eine ähnliche Funktionalität zu erreichen.

Das Folgende ist eine Beispiel-MySQL-Abfrage:

<code class="language-sql">SELECT    first_name,
          age,
          gender,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r
ORDER BY  age;</code>
Nach dem Login kopieren
Nach dem Login kopieren

Diese Abfrage verwendet die Ranking-Variable @curRank, die mithilfe der Unterabfrage (SELECT @curRank := 0) auf Null initialisiert wird. Während jede Zeile der Tabelle person verarbeitet wird, wird die Variable @curRank um 1 erhöht, wodurch ein Ranking-Mechanismus basierend auf dem angegebenen Sortierkriterium (in diesem Fall Alter) erstellt wird.

Um dies zu veranschaulichen, wenden wir diese Methode auf eine Beispieltabelle person an:

<code class="language-sql">CREATE TABLE person (id int, first_name varchar(20), age int, gender char(1));

INSERT INTO person VALUES (1, 'Bob', 25, 'M');
INSERT INTO person VALUES (2, 'Jane', 20, 'F');
INSERT INTO person VALUES (3, 'Jack', 30, 'M');
INSERT INTO person VALUES (4, 'Bill', 32, 'M');
INSERT INTO person VALUES (5, 'Nick', 22, 'M');
INSERT INTO person VALUES (6, 'Kathy', 18, 'F');
INSERT INTO person VALUES (7, 'Steve', 36, 'M');
INSERT INTO person VALUES (8, 'Anne', 25, 'F');</code>
Nach dem Login kopieren

Abfrage ausführen:

<code class="language-sql">SELECT    first_name,
          age,
          gender,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r
ORDER BY  age;</code>
Nach dem Login kopieren
Nach dem Login kopieren

führt zu folgenden Ergebnissen:

<code>+------------+------+--------+------+
| first_name | age  | gender | rank |
+------------+------+--------+------+
| Kathy      |   18 | F      |    1 |
| Jane       |   20 | F      |    2 |
| Nick       |   22 | M      |    3 |
| Bob        |   25 | M      |    4 |
| Anne       |   25 | F      |    5 |
| Jack       |   30 | M      |    6 |
| Bill       |   32 | M      |    7 |
| Steve      |   36 | M      |    8 |
+------------+------+--------+------+
8 rows in set (0.02 sec)</code>
Nach dem Login kopieren

Anscheinend weist diese Abfrage Personen in jeder Geschlechterpartition erfolgreich Rangfolgen zu, ähnlich den erwarteten Ergebnissen der ANSI-Standard-SQL-Abfrage. Diese Technik bietet einen praktischen Workaround, wenn MySQL keine dedizierte RANK-Funktion hat.

Das obige ist der detaillierte Inhalt vonWie kann ich ein Ranking in MySQL ohne eine native RANK-Funktion implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage