Maison >base de données >tutoriel mysql >Comment répliquer la fonction ANSI SQL RANK dans MySQL ?

Comment répliquer la fonction ANSI SQL RANK dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-24 05:02:08496parcourir

How to Replicate the ANSI SQL RANK Function in MySQL?

Simuler la fonction ANSI SQL RANK dans MySQL

En SQL, la fonction RANK est utilisée pour calculer la position d'une valeur donnée dans une liste ordonnée. Pour déterminer le classement en fonction du sexe et de l'âge d'un client, vous pouvez utiliser la requête ANSI SQL suivante :

<code class="language-sql">SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender], FirstName, Age, Gender FROM Person</code>

Cependant, MySQL n'a pas d'équivalent direct à la fonction RANK fournie dans la requête ci-dessus. Voici une autre façon d'obtenir le classement souhaité dans MySQL :

Une solution consiste à utiliser une variable de classement, comme celle-ci :

<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>
Le but de la section

(SELECT @curRank := 0) est d'initialiser les variables sans avoir besoin d'une commande SET distincte.

Considérez un scénario de test dans lequel vous créez une table de personnes et insérez des exemples de valeurs :

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

Après avoir exécuté la requête MySQL, vous obtiendrez les résultats suivants, qui classent les clients en fonction de leur âge dans leurs groupes de sexe respectifs :

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

Avec cette méthode, vous pouvez classer efficacement les clients dans MySQL en fonction de critères spécifiés, même si MySQL n'a pas de fonction RANK intégré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:
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