Explication détaillée du classement du groupe MySQL
Les administrateurs de bases de données doivent souvent trier et classer les données groupées. Par exemple, un tableau des performances des élèves, contenant des informations sur la classe et les élèves ainsi que les notes, doit être regroupé par classe et classer les performances des élèves dans chaque classe.
MySQL peut obtenir un classement de groupe grâce aux méthodes suivantes :
<code class="language-sql">SELECT id_student, id_class, grade, @student:=CASE WHEN @class = id_class THEN @student+1 ELSE 0 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= -1, @class := -1) AS init_vars, -- 初始化变量 (SELECT * FROM mytable ORDER BY id_class, grade DESC -- 按班级和成绩降序排序 ) AS t</code>
Cette requête fonctionne comme ceci :
Initialisation des variables : utilisez la sous-requête (SELECT @student:= -1, @class := -1) AS init_vars
pour initialiser les variables définies par l'utilisateur @student
et @class
à -1.
Itération groupée : la requête sélectionne les données d'une table temporaire t
qui a été triée par id_class
et grade
par ordre décroissant.
Calcul du classement : L'instruction CASE
calcule le rang (rn) de chaque élève en fonction du id_class
actuel et du @class
précédent stocké dans id_class
. Si id_class
change, @student
est réinitialisé à 0 sinon, @student
est incrémenté.
Mettre à jour la variable de classe : @class
est mis à jour à la valeur actuelle de id_class
pour la prochaine itération.
Les résultats de la requête seront une liste des élèves de chaque classe, triés par leurs notes par ordre décroissant et triés par leur rang dans la classe. Cette méthode effectue efficacement un classement groupé, vous permettant de récupérer facilement des données triées et classées dans des scénarios complexes impliquant des données groupées. Notez que la base de tri ici est grade
ordre décroissant, et le champ et l'ordre de tri peuvent être ajustés en fonction des besoins réels.
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!