update winners
set rank = (
select count(score) + 1
from winners w2
where w2.category_id = winners.category_id and w2.score > winners.score
)
count(*)
sẽ đánh giá bằng 0 ngay cả khi không có hàng nào phù hợp với điều kiện, tức là xếp hạng cao nhất. Nếu bạn muốn có một thứ hạng dày đặc, bạn có thể làm điều này:
update winners
set rank = (
select count(distinct score) + 1
from winners w2
where w2.category_id = winners.category_id and w2.score > winners.score
)
CHỈNH SỬA:Theo nhận xét của bạn, tôi đã tìm thấy một truy vấn hoạt động. (Nó hoạt động trên SQL Server và tôi không quen với các điều kỳ quặc của MySQL.) http:// sqlfiddle.com/#!9/1159f/1
update winners
inner join (
select w.id, w.category_id, count(w2.score) + 1 rank
from winners w left outer join winners w2
on w2.category_id = w.category_id and w2.score > w.score
group by w.id
) r
on r.id = winners.id
set winners.rank = r.rank