Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thực hiện xếp hạng theo nhóm trong 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

Điều này hoạt động theo một cách rất đơn giản:

  1. Truy vấn ban đầu được sắp xếp theo id_class đầu tiên, id_student thứ hai.
  2. @student@class được khởi tạo thành -1
  3. @class được sử dụng để kiểm tra xem tập tiếp theo có được nhập hay không. Nếu giá trị trước đó của id_class (được lưu trữ trong @class ) không bằng giá trị hiện tại (được lưu trữ trong id_class ), @student là 0. Nếu không thì là tăng dần.
  4. @class được gán với giá trị mới là id_class và nó sẽ được sử dụng trong thử nghiệm ở bước 3 ở hàng tiếp theo.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm MySQL DEGREES () - Chuyển đổi từ Radian sang Độ

  2. mysql - bao nhiêu cột là quá nhiều?

  3. Làm thế nào để bắt đầu MySQL với --skip-Grant-Table?

  4. MySQL find_in_set với nhiều chuỗi tìm kiếm

  5. Chèn dữ liệu vào cơ sở dữ liệu MySQL