Đôi khi bạn cần tìm xếp hạng thứ n trong MySQL. Ví dụ:tìm số hạng thứ 3 trong một lớp học sinh. Học sinh xếp loại theo điểm. Để tìm thứ hạng thứ n trong MySQL, trước tiên chúng ta sẽ xếp hạng các bản ghi. Sau đó, chúng tôi lọc xếp hạng thứ n trong MySQL. Đâ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ìm xếp hạng thứ n 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 | +----+------+
Tại đây, chúng tôi tìm thấy kỷ lục có xếp hạng 3 . Truy vấn sau đây xếp hạng các bản ghi dựa trên số điểm ngày càng tăng. Sau đó, nó lọc bản ghi với thứ hạng 3:
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score) WHERE rank = 3;
(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 | +----+------+------+ | 5 | 20 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Tìm xếp hạng thứ n trong MySQL dựa trên giá trị giảm dần
Nếu bạn muốn tìm thứ hạng thứ n 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 trong truy vấn. Ở đây chúng tôi tìm thấy kỷ lục với thứ hạng 3.
SELECT * from ( SELECT id,score, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY score DESC) WHERE rank=3;
Kết quả:
+----+------+------+ | id | score| rank | +----+------+------+ | 3 | 30 | 3 | +----+------+------+ 1 row in set (0.0 sec)
Bạn có thể áp dụng các phương pháp trên để có thứ hạng thứ n cho bất kỳ loại chỉ số nào như tiền lương, số lượng nhân viên, v.v.