Vấn đề:
Bạn muốn xếp hạng các bản ghi bằng cách bỏ qua các vị trí xếp hạng sau các hàng có cùng thứ hạng.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng tên là championship
với dữ liệu trong các cột sau:id
(khóa chính), user_name
và score
.
id | user_name | điểm |
111 | John | 12 |
112 | Mary | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Chris | 23 |
Hãy hiển thị tên của tất cả người dùng và điểm số của họ được sắp xếp theo thứ tự giảm dần và xếp hạng theo điểm số.
Giải pháp 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Truy vấn này trả về xếp hạng sau:
rank_place | user_name | điểm |
1 | Lisa | 45 |
2 | Mary | 23 |
2 | Alan | 23 |
2 | Chris | 23 |
5 | John | 12 |
Lưu ý rằng số thứ hạng là từ 1 đến 5, được sắp xếp theo điểm theo thứ tự giảm dần.
Thảo luận:
Sử dụng RANK
nếu bạn muốn bỏ qua các vị trí xếp hạng sau các hàng có cùng thứ hạng. Trong ví dụ của chúng tôi, Mary, Alan và Chris đều có cùng xếp hạng là 2. Vị trí đủ điều kiện tiếp theo là 5 (được tính từ 2 + 3 hàng có cùng thứ hạng).