Requête de classement de groupe MySQL : guide complet
En informatique, il est souvent nécessaire de déterminer le classement de chaque enregistrement au sein d'un groupe. Dans MySQL, cette fonctionnalité peut être obtenue en utilisant des fonctions de fenêtre telles que ROW_NUMBER() ou RANK() en conjonction avec une clause de regroupement.
Considérez la forme suivante :
学生ID (ID_STUDENT) | 班级ID (ID_CLASS) | 成绩 (GRADE) |
---|---|---|
1 | 1 | 90 |
1 | 2 | 80 |
2 | 1 | 99 |
3 | 1 | 80 |
4 | 1 | 70 |
5 | 2 | 78 |
6 | 2 | 90 |
6 | 3 | 50 |
7 | 3 | 90 |
Pour créer des classements groupés, vous pouvez utiliser la requête suivante :
<code class="language-sql">SELECT id_student, id_class, grade, @student:=CASE WHEN @class = id_class THEN @student + 1 ELSE 1 END AS rn, @class:=id_class AS clset FROM (SELECT @student:= 0) s, (SELECT @class:= 0) c, (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student ) t;</code>
Comment ça marche :
Trier les lignes : La sous-requête dans la clause ORDER BY garantit que les données sont triées d'abord par id_class
, puis par grade
par ordre décroissant, et enfin par id_student
. Cela garantit que les élèves ayant des notes plus élevées au sein d’une même classe sont mieux classés.
Initialisation des variables : Initialisez deux variables définies par l'utilisateur @student
et @class
à 0 à l'aide de sous-requêtes distinctes. Ces variables sont utilisées pour suivre respectivement le rang et le groupe de classe.
Regroupement et classement : La requête principale utilise une expression CASE pour déterminer le classement au sein de chaque groupe. Pour les lignes d'un même groupe (basé sur id_class
), le rang est incrémenté ; pour un nouveau groupe, le rang est remis à 1. La variable @student
modifiée se voit attribuer une valeur de classement.
Mettre à jour le groupe de classe : la variable @class
est mise à jour avec la valeur id_class
actuelle pour garder une trace du groupe actif.
Résultat final : La requête sélectionne les colonnes pertinentes, y compris le rang (rn) calculé à l'aide de variables définies par l'utilisateur.
Cette requête de classement groupé vous permet de déterminer efficacement le classement des étudiants au sein de différentes classes dans MySQL. Cette méthode combine des sous-requêtes, des variables définies par l'utilisateur et des instructions conditionnelles pour obtenir les résultats souhaités. Notez que cette méthode est légèrement différente de l'article original. Il existe des problèmes avec la logique d'initialisation des variables et d'incrémentation de l'article original, ce qui peut facilement conduire à des erreurs de classement. Cette méthode corrige ce problème et garantit l'exactitude des résultats du classement.
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!