sql >> Database >  >> RDS >> Mysql

Gegroepeerde rangschikking uitvoeren 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

Dit werkt op een heel eenvoudige manier:

  1. Eerste zoekopdracht is gerangschikt op id_class eerst, id_student tweede.
  2. @student en @class worden geïnitialiseerd op -1
  3. @class wordt gebruikt om te testen of de volgende set wordt ingevoerd. Als de vorige waarde van de id_class (die is opgeslagen in @class ) is niet gelijk aan de huidige waarde (die is opgeslagen in id_class ), de @student wordt op nul gezet. Anders wordt het verhoogd.
  4. @class wordt toegewezen met de nieuwe waarde id_class , en het wordt gebruikt in de test bij stap 3 in de volgende rij.


  1. MySQL-werkbank

  2. Hoe Galera Cluster te automatiseren met behulp van de ClusterControl CLI

  3. Waarom negeert de SQL Server automatisch de lege ruimte aan het einde?

  4. Wanneer moet ik puntkomma's gebruiken in SQL Server?