Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykonać pogrupowany ranking w 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

Działa to w bardzo prosty sposób:

  1. Początkowe zapytanie jest uporządkowane według id_class najpierw id_student drugi.
  2. @student i @class są inicjowane do -1
  3. @class służy do sprawdzenia, czy wprowadzono następny zestaw. Jeśli poprzednia wartość id_class (który jest przechowywany w @class ) nie jest równa bieżącej wartości (która jest przechowywana w id_class ), @student jest wyzerowany. W przeciwnym razie jest zwiększany.
  4. @class ma przypisaną nową wartość id_class , i zostanie użyty w teście w kroku 3 w następnym wierszu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać ostatni rekord w każdej grupie w MySQL?

  2. MySQL:Wstaw rekord, jeśli nie istnieje w tabeli

  3. SQL Server odpowiednik funkcji substring_index w MySQL

  4. Jak wyłączyć sprawdzanie klucza obcego w MySQL?

  5. Błąd:wybierz polecenie odrzucone użytkownikowi „<userid>”@„<adres-ip> ” dla tabeli „<nazwa-tabeli>”