Maison >base de données >tutoriel mysql >Comment effectuer un classement groupé des performances des étudiants dans MySQL ?
Classement des groupes dans MySQL
Supposons que vous disposiez d'un tableau contenant les données sur les performances des élèves, notamment l'identifiant de l'élève, l'identifiant de la classe et la note. Le classement des élèves au sein de chaque classe peut donner un aperçu de leur niveau d'apprentissage. Ceci peut être réalisé en utilisant une combinaison de variables, de sous-requêtes et d'opérateurs de comparaison.
La requête suivante utilise les variables @student et @class :
<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) s, (SELECT @class:= -1) c, (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student ) t</code>
Processus de demande :
Tri des données : Sous-requête la plus interne (SELECT * FROM mytable ORDER BY id_class, grade DESC, id_student)
Trier d'abord par ID de classe, puis par note par ordre décroissant et enfin par ID d'étudiant. 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 : Utilisez des sous-requêtes pour initialiser les variables @student et @class à -1.
Rang d'affectation : L'instruction SELECT
dans l'instruction CASE
vérifie si l'ID de classe actuel est le même que l'ID de classe précédent. S'ils sont identiques, @student est incrémenté de 1 ; sinon, @student est réinitialisé à 0. Cela établit des classements au sein de chaque classe.
Mettre à jour @class : La variable @class reçoit l'ID de classe actuel. Il est utilisé dans les lignes suivantes des instructions CASE
pour déterminer si les élèves appartiennent à la même classe.
En utilisant des variables et des sous-requêtes, cette requête regroupe efficacement les étudiants dans leurs classes respectives et attribue des classements en conséquence, offrant ainsi un moyen significatif d'interpréter l'apprentissage des étudiants au sein de chaque groupe. Notez que cette requête trie par ordre décroissant de notes, les étudiants ayant des notes plus élevées étant mieux classés. Si vous devez trier par ordre croissant, veuillez remplacer ORDER BY id_class, grade DESC, id_student
par ORDER BY id_class, grade ASC, id_student
.
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!