Maison > base de données > tutoriel mysql > Comment puis-je implémenter le classement dans MySQL sans fonction RANK native ?

Comment puis-je implémenter le classement dans MySQL sans fonction RANK native ?

Linda Hamilton
Libérer: 2025-01-24 05:06:09
original
395 Les gens l'ont consulté

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

Implémenter le classement dans MySQL : une alternative à l'utilisation de variables

MySQL lui-même ne fournit pas de fonction RANK comparable aux requêtes SQL standard ANSI. Cependant, il existe des alternatives à l'utilisation de variables pour obtenir des fonctionnalités similaires.

Ce qui suit est un exemple de requête MySQL :

SELECT    first_name,
          age,
          gender,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r
ORDER BY  age;
Copier après la connexion
Copier après la connexion

Cette requête utilise la variable de classement @curRank, qui est initialisée à zéro à l'aide de la sous-requête (SELECT @curRank := 0). Au fur et à mesure que chaque ligne du tableau person est traitée, la variable @curRank est incrémentée de 1, créant un mécanisme de classement basé sur le critère de tri spécifié (dans ce cas, l'âge).

Pour illustrer cela, appliquons cette méthode à un exemple de person tableau :

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');
Copier après la connexion

Exécuter la requête :

SELECT    first_name,
          age,
          gender,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r
ORDER BY  age;
Copier après la connexion
Copier après la connexion

produira les résultats suivants :

<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>
Copier après la connexion

Apparemment, cette requête attribue avec succès un classement aux individus dans chaque partition de genre, similaire aux résultats attendus de la requête SQL standard ANSI. Cette technique fournit une solution de contournement pratique lorsque MySQL ne dispose pas d'une fonction RANK dédiée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal