Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana melakukan pemeringkatan yang dikelompokkan di 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

Ini bekerja dengan cara yang sangat sederhana:

  1. Kueri awal diurutkan berdasarkan id_class pertama, id_student kedua.
  2. @student dan @class diinisialisasi ke -1
  3. @class digunakan untuk menguji apakah set berikutnya dimasukkan. Jika nilai sebelumnya dari id_class (yang disimpan di @class ) tidak sama dengan nilai saat ini (yang disimpan di id_class ), @student adalah nol. Jika tidak, akan bertambah.
  4. @class ditugaskan dengan nilai baru id_class , dan akan digunakan dalam pengujian pada langkah 3 di baris berikutnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1071 - Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 1000 byte

  2. Sintaks SQL DROP DATABASE – Didaftarkan oleh DBMS

  3. PDO mysql:Bagaimana cara mengetahui apakah penyisipan berhasil

  4. Cara Mengaktifkan Cache Permintaan MySQL

  5. Lakukan while/loop untuk mendapatkan 10 hasil random