Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como executar a classificação agrupada no 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

Isso funciona de uma maneira muito simples:
  1. A consulta inicial é ordenada por id_class primeiro, id_student segundo.
  2. @student e @class são inicializados para -1
  3. @class é usado para testar se o próximo conjunto foi inserido. Se o valor anterior do id_class (que é armazenado em @class ) não é igual ao valor atual (que é armazenado em id_class ), o @student está zerado. Caso contrário, é incrementado.
  4. @class é atribuído com o novo valor de id_class , e será usado no teste da etapa 3 na próxima linha.