Mysql
 sql >> Database >  >> RDS >> Mysql

Come eseguire la classifica raggruppata in 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

Funziona in modo molto semplice:

  1. La query iniziale è ordinata per id_class prima, id_student secondo.
  2. @student e @class sono inizializzati su -1
  3. @class viene utilizzato per verificare se viene immessa la serie successiva. Se il valore precedente di id_class (che è memorizzato in @class ) non è uguale al valore corrente (che è memorizzato in id_class ), il @student è azzerato. Altrimenti viene incrementato.
  4. @class viene assegnato il nuovo valore di id_class e verrà utilizzato nel test del passaggio 3 nella riga successiva.