समस्या:
आप लगातार पंक्तियों में रैंकिंग स्थिति जोड़ना चाहते हैं, भले ही पंक्तियों का मान समान हो।
उदाहरण:
हमारे डेटाबेस में competition
निम्नलिखित कॉलम में डेटा के साथ:id
(प्राथमिक कुंजी), first_name
, last_name
, और score
।
आईडी | प्रथम_नाम | last_name | स्कोर |
11 | जॉन | थॉमस | 345 |
14 | मैरी | जॉनसन | 222 |
16 | लिसा | भूरा | 154 |
23 | एलन | ब्लेक | 222 |
32 | क्रिस | टेलर | 154 |
आइए छात्रों के बारे में सभी विवरण प्रदर्शित करें:उनका अंतिम नाम, पहला नाम, और स्कोर score
द्वारा क्रमबद्ध घटते क्रम में। यदि एक से अधिक छात्रों के लिए कुछ अंक समान हैं, तो हम स्थिति संख्याओं को छोड़ना नहीं चाहते हैं।
समाधान 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
ध्यान दें कि रैंक 1 से 3 तक होती है।
चर्चा:
DENSE_RANK
का उपयोग करें यदि आप समान रैंक वाली पंक्तियों के बाद रैंकिंग स्थिति को छोड़ना नहीं चाहते हैं। हमारे उदाहरण में, भले ही मैरी और एलन की रैंक 2 समान है, लिसा की स्थिति 3 है।