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

Sådan udfører du grupperet rangering i 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

Dette fungerer på en meget enkel måde:

  1. Indledende forespørgsel er sorteret efter id_class først id_student sekund.
  2. @student og @class initialiseres til -1
  3. @class bruges til at teste om det næste sæt er indtastet. Hvis den forrige værdi af id_class (som er gemt i @class ) er ikke lig med den aktuelle værdi (som er gemt i id_class ), @student er nulstillet. Ellers øges den.
  4. @class er tildelt den nye værdi id_class , og det vil blive brugt i test på trin 3 på næste række.


  1. Brug af SQLCipher med Android

  2. MySql Single Table, Vælg de sidste 7 dage og medtag tomme rækker

  3. Log forespørgselstid i SQLite på Android

  4. Oprettelse af valgfrie afhængigheder