Vấn đề:
Bạn muốn thêm vị trí xếp hạng cho các hàng liên tiếp, ngay cả khi các hàng có cùng giá trị.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng có tên là competition
với dữ liệu trong các cột sau:id
(khóa chính), first_name
, last_name
và score
.
id | first_name | last_name | điểm |
11 | John | Thomas | 345 |
14 | Mary | Johnson | 222 |
16 | Lisa | Màu nâu | 154 |
23 | Alan | Blake | 222 |
32 | Chris | Taylor | 154 |
Hãy hiển thị tất cả thông tin chi tiết về học sinh:họ, tên và điểm số được sắp xếp theo score
thứ tự giảm dần. Chúng tôi không muốn bỏ qua số vị trí nếu một số điểm giống nhau cho nhiều học sinh.
Giải pháp 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Lưu ý rằng thứ hạng nằm trong khoảng từ 1 đến 3.
Thảo luận:
Sử dụng DENSE_RANK
nếu bạn không 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, mặc dù Mary và Alan có cùng thứ hạng là 2, nhưng vị trí của Lisa là 3.