Đôi khi bạn cần phải tính toán thứ hạng trong MySQL. Bạn có thể sắp xếp theo số hoặc văn bản nhưng không thể tính toán xếp hạng trong MySQL một cách dễ dàng. Đây là một truy vấn bạn có thể sử dụng. Chỉ cần thay thế tên bảng điểm số và tên cột id, điểm số.
Tính toán xếp hạng trong MySQL dựa trên giá trị ngày càng tăng
Ví dụ:
CREATE TABLE score (id int, score int); INSERT INTO scores VALUES (1, 35),(2, 10),(3,30),(4,22),(5,20),(6,18),(7,36); Scores: +----+------+ | id | score| +----+------+ | 1 | 35 | | 2 | 10 | | 3 | 30 | | 4 | 22 | | 5 | 20 | | 6 | 18 | | 7 | 36 | +----+------+
Chúng tôi sử dụng một biến xếp hạng, chẳng hạn như sau:
SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score;
(SELECT @curRank := 0)
phần cho phép khởi tạo biến mà không yêu cầu lệnh SET riêng biệt.
Result: +----+------+------+ | id | score| rank | +----+------+------+ | 2 | 10 | 1 | | 6 | 18 | 2 | | 5 | 20 | 3 | | 4 | 22 | 4 | | 3 | 30 | 5 | | 1 | 35 | 6 | | 7 | 36 | 7 | +----+------+------+ 7 rows in set (0.02 sec)
Tính thứ hạng trong MySQL dựa trên giá trị giảm dần
Nếu bạn muốn tính xếp hạng trong MySQL dựa trên thứ tự giảm dần của điểm số, chỉ cần thêm từ khóa DESC vào truy vấn.
SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score DESC;
Kết quả: