sql >> Base de Datos >  >> RDS >> Mysql

Cómo realizar una clasificación agrupada en 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

Esto funciona de una manera muy sencilla:

  1. La consulta inicial está ordenada por id_class primero, id_student segundo.
  2. @student y @class se inicializan a -1
  3. @class se utiliza para comprobar si se ha introducido el siguiente conjunto. Si el valor anterior de id_class (que se almacena en @class ) no es igual al valor actual (que se almacena en id_class ), el @student se pone a cero. De lo contrario, se incrementa.
  4. @class se asigna con el nuevo valor de id_class , y se usará en la prueba del paso 3 en la siguiente fila.