Đây chỉ là một bản sửa lỗi của giải pháp Gordon sử dụng các biến. Vấn đề là chức năng xếp hạng của bạn không phải là cách xếp hạng hoạt động. (học sinh 4 phải được xếp hạng 4)
SQL Fiddle Demo Bạn có thể thêm nhiều sinh viên hơn để cải thiện bài kiểm tra.
select er.*,
(@rank := if(@points = points,
@rank,
if(@points := points,
@rank + 1,
@rank + 1
)
)
) as ranking
from students er cross join
(select @rank := 0, @points := -1) params
order by points desc;
ĐẦU RA
| id | points | ranking |
|----|--------|---------|
| 1 | 80 | 1 |
| 2 | 78 | 2 |
| 3 | 78 | 2 |
| 4 | 77 | 3 |
| 5 | 66 | 4 |
| 6 | 66 | 4 |
| 7 | 66 | 4 |
| 8 | 15 | 5 |