update winners
set rank = (
select count(score) + 1
from winners w2
where w2.category_id = winners.category_id and w2.score > winners.score
)
count(*)
जब कोई पंक्तियाँ शर्त से मेल नहीं खातीं, यानी शीर्ष रैंकिंग, तब भी शून्य का मूल्यांकन करेगा। यदि आप एक सघन रैंक चाहते हैं तो आप यह कर सकते हैं:
update winners
set rank = (
select count(distinct score) + 1
from winners w2
where w2.category_id = winners.category_id and w2.score > winners.score
)
संपादित करें:आपकी टिप्पणी के अनुसार मुझे एक प्रश्न मिला है जो काम करता है। (यह SQL सर्वर पर काम करता है और मैं 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