Approche MySQL du classement des données
Le classement des données est essentiel pour l'analyse des données. Bien que MySQL ne prenne pas directement en charge la fonction ANSI RANK()
, il propose des méthodes alternatives pour obtenir des résultats similaires. Cet article explore comment MySQL émule le classement à l'aide de variables définies par l'utilisateur.
Pour reproduire les fonctionnalités de RANK()
(par exemple, classer les clients par âge au sein de leur groupe de sexe), MySQL exploite l'affectation de variables dans les requêtes SQL. La requête suivante illustre cette technique :
<code class="language-sql">SELECT first_name, age, gender, @curRank := @curRank + 1 AS rank FROM person p, (SELECT @curRank := 0) r ORDER BY gender, age;</code>
Cette requête initialise efficacement la variable de classement @curRank
dans une sous-requête, éliminant ainsi le besoin d'une instruction SET
distincte.
Exemple illustratif :
Considérons un exemple de person
tableau :
<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>
L'exécution de la requête ci-dessus sur cette table produit une sortie classée :
<code>+------------+------+--------+------+ | first_name | age | gender | rank | +------------+------+--------+------+ | Kathy | 18 | F | 1 | | Jane | 20 | F | 2 | | Anne | 25 | F | 3 | | Bob | 25 | M | 4 | | Nick | 22 | M | 5 | | Jack | 30 | M | 6 | | Bill | 32 | M | 7 | | Steve | 36 | M | 8 | +------------+------+--------+------+</code>
La clause ORDER BY gender, age
garantit que le classement est effectué séparément pour chaque sexe, puis par âge au sein de chaque sexe. Cela reflète efficacement le comportement de la fonction ANSI RANK()
. Notez que cette méthode attribue des rangs consécutifs, même s’il existe des égalités d’âge. Pour manipuler les liens différemment, des techniques plus complexes seraient nécessaires.
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!