Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment effectuer un classement groupé dans MySQL

SELECT id_student, id_class, grade,
   @student:=CASE WHEN @class <> id_class THEN 0 ELSE @student+1 END AS rn,
   @class:=id_class AS clset
FROM
  (SELECT @student:= -1) s,
  (SELECT @class:= -1) c,
  (SELECT *
   FROM mytable
   ORDER BY id_class, id_student
  ) t

Cela fonctionne de manière très simple :

  1. La requête initiale est triée par id_class d'abord, id_student seconde.
  2. @student et @class sont initialisés à -1
  3. @class est utilisé pour tester si le jeu suivant est entré. Si la valeur précédente de id_class (qui est stocké dans @class ) n'est pas égal à la valeur actuelle (qui est stockée dans id_class ), le @student est mis à zéro. Sinon, il est incrémenté.
  4. @class est attribué avec la nouvelle valeur de id_class , et il sera utilisé dans le test à l'étape 3 à la ligne suivante.