समस्या:
आप समान रैंक वाली पंक्तियों के बाद रैंकिंग स्थिति को छोड़ कर रिकॉर्ड रैंक करना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में championship
निम्नलिखित कॉलम में डेटा के साथ:id
(प्राथमिक कुंजी), user_name
, और score
।
आईडी | user_name | स्कोर |
111 | जॉन | 12 |
112 | मैरी | 23 |
115 | लिसा | 45 |
120 | एलन | 23 |
221 | क्रिस | 23 |
आइए सभी उपयोगकर्ताओं के नाम और उनके स्कोर को अवरोही क्रम में क्रमबद्ध करें और स्कोर के आधार पर प्रदर्शित करें।
समाधान 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
यह क्वेरी निम्न रैंकिंग लौटाती है:
रैंक_प्लेस | user_name | स्कोर |
1 | लिसा | 45 |
2 | मैरी | 23 |
2 | एलन | 23 |
2 | क्रिस | 23 |
5 | जॉन | 12 |
ध्यान दें कि रैंक संख्या 1 से 5 तक होती है, जो कि अवरोही क्रम में स्कोर द्वारा क्रमबद्ध होती है।
चर्चा:
RANK
का उपयोग करें यदि आप समान रैंक वाली पंक्तियों के बाद रैंकिंग पदों को छोड़ना चाहते हैं। हमारे उदाहरण में, मैरी, एलन और क्रिस सभी की रैंकिंग 2 की समान थी। अगली योग्य स्थिति 5 है (समान रैंक वाली 2 + 3 पंक्तियों से परिकलित)।