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
Libérer: 2025-01-24 05:02:08
original
456 Les gens l'ont consulté

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

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

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

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!

source:php.cn
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