Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

समूहों के भीतर रिकॉर्ड रैंकिंग के साथ एक MySQL तालिका अपडेट करें

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मेरी टेबल का आकार अपेक्षा से 4x बड़ा क्यों है? (पंक्तियाँ * बाइट्स / पंक्ति)

  2. शनिवार से शुरू होने वाले सप्ताहों के लिए वर्ष का सप्ताह

  3. SQLalchemy की `यील्ड_पर ()` समस्याओं को बेहतर ढंग से समझें

  4. MySQL:इनर जॉइन बनाम व्हेयर

  5. SCUMM डैशबोर्ड के साथ MySQL की प्रभावी निगरानी:भाग 3