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