Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да извършите групирано класиране в 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

Това работи по много прост начин:

  1. Първоначалната заявка е подредена по id_class първо, id_student второ.
  2. @student и @class се инициализират на -1
  3. @class се използва за проверка дали е въведен следващият набор. Ако предишната стойност на id_class (който се съхранява в @class ) не е равно на текущата стойност (която се съхранява в id_class ), @student е нулиран. В противен случай се увеличава.
  4. @class се присвоява с новата стойност на id_class , и ще се използва в теста на стъпка 3 на следващия ред.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е разликата между BIT и TINYINT в MySQL?

  2. Как да намерите името на ограничение в MySQL

  3. Кумулативна сума за набор от редове в mysql

  4. LOCALTIMESTAMP Примери – MySQL

  5. Свързване с MySQL бази данни