Maison > base de données > tutoriel mysql > Comment classer les données au sein des groupes dans MySQL ?

Comment classer les données au sein des groupes dans MySQL ?

Mary-Kate Olsen
Libérer: 2025-01-17 19:51:10
original
195 Les gens l'ont consulté

How to Rank Data Within Groups in MySQL?

Explication détaillée du classement du groupe MySQL

Dans certains scénarios, les données doivent être classées en fonction de regroupements plutôt que de s'appuyer uniquement sur un seul champ. Par exemple, supposons qu'il existe une table d'étudiants contenant l'identifiant de l'étudiant, l'identifiant de la classe et les notes comme suit :

ID_STUDENT 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 classer les élèves de chaque classe en fonction de leurs notes, la requête MySQL suivante peut être utilisée :

<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>
Copier après la connexion

Cette requête contient les étapes suivantes :

  1. Initialisation des variables : Les deux variables utilisateur @student et @class sont initialisées à 0.

  2. Traitement ligne par ligne : La requête externe traite chaque ligne de l'ensemble de résultats dans l'ordre spécifié par la clause ORDER BY (id_class, grade DESC, id_student). Notez que grade DESC est utilisé dans le tri ici pour garantir que les étudiants ayant des scores élevés soient classés en premier.

  3. Classement au sein du groupe : L'instruction CASE vérifie si le id_class actuel est le même que le précédent id_class (@class). S'ils sont identiques, ajoutez 1 à @student ; sinon, réinitialisez @student à 1. Cela garantit que la valeur rn (classement) est unique au sein de chaque groupe (id_class).

  4. Affectation groupée : @class se voit attribuer le id_class actuel et sera comparé sur la ligne suivante.

Le résultat de cette requête fournira le classement des groupes d'étudiants souhaité :

ID_STUDENT ID_CLASS GRADE RANK
2 1 99 1
1 1 90 2
3 1 80 3
4 1 70 4
6 2 90 1
1 2 80 2
5 2 78 3
7 3 90 1
6 3 50 2

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal