समस्या:
परिणाम सेट में, आप प्रत्येक विभाजन के भीतर रिकॉर्ड और रैंक पंक्तियों को विभाजित करना चाहते हैं, विभाजन के भीतर पंक्तियों की रैंक दिखाने के लिए एक और कॉलम जोड़ना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में निम्नलिखित कॉलम में डेटा के साथ पत्रिका नाम की एक तालिका है:id
(प्राथमिक कुंजी), name
, category
, और price
।
आईडी | <थ>नामश्रेणी | कीमत | |
---|---|---|---|
105 | देश में रहने वाले | जीवनशैली | 1.70 |
108 | समाचार पत्रिका | समाचार | 3.35 |
115 | डेसिबल | संगीत | 6.50 |
123 | ड्रम पत्रिका | संगीत | 6.50 |
145 | सूर्यास्त | जीवनशैली | 12.00 |
155 | विश्व | जीवनशैली | 9.50 |
158 | कीबोर्ड | संगीत | 8.45 |
आइए पत्रिकाओं को श्रेणी . के अनुसार समूहित करें और प्रत्येक समूह को कीमत . के आधार पर अवरोही क्रम में रैंक करें . प्रत्येक पत्रिका के लिए रैंकिंग स्थिति, नाम, श्रेणी और मूल्य प्रदर्शित करें।
समाधान:
SELECT category, name, price, RANK() OVER (PARTITION BY category ORDER BY price DESC ) AS price_rank FROM magazine;
ये रहा परिणाम:
श्रेणी | <थ>नामकीमत | price_rank | |
---|---|---|---|
जीवनशैली | सूर्यास्त | 12.00 | 1 |
जीवनशैली | विश्व | 9.50 | 2 |
जीवनशैली | देश में रहने वाले | 1.70 | 3 |
संगीत | कीबोर्ड | 8.45 | 1 |
संगीत | डेसिबल | 6.50 | 2 |
संगीत | ड्रम पत्रिका | 6.50 | 2 |
समाचार | समाचार पत्रिका | 3.35 | 1 |
चर्चा:
पंक्तियों को विभाजित करने और उन्हें विभाजन के भीतर उनकी स्थिति के आधार पर रैंक करने के लिए, RANK () फ़ंक्शन का उपयोग PARTITION BY क्लॉज के साथ करें।
SQL का RANK () फ़ंक्शन हमें परिणाम सेट के भीतर या प्रत्येक विभाजन के भीतर एक रिकॉर्ड की स्थिति जोड़ने की अनुमति देता है। हमारे उदाहरण में, हम एक विभाजन के भीतर पंक्तियों को रैंक करते हैं।
ओवर () क्लॉज हमेशा रैंक () के बाद आता है। ओवर () में क्लॉज द्वारा ऑर्डर होना चाहिए। यदि आप किसी पार्टीशन के भीतर रैंक लौटा रहे हैं, तो OVER() क्लॉज के अंदर एक PARTITION BY क्लॉज रखें। PARTITION BY के बाद एक एक्सप्रेशन या कॉलम नाम आता है; हमारे उदाहरण में, हम category
. कॉलम का उपयोग करते हैं (PARTITION BY category
)
नोट: यदि आप पार्टिशन का उपयोग नहीं कर रहे हैं, तो आप पार्टिशन बाय को छोड़ सकते हैं और बस ऑर्डर बाय क्लॉज को ओवर () में डाल सकते हैं।
PARTITION BY के बाद, ORDER BY उसके बाद सॉर्टिंग कॉलम या एक्सप्रेशन के नाम रखें। हमारे उदाहरण में, हम price
. कॉलम के आधार पर अवरोही क्रम में सॉर्ट कर रहे हैं (ORDER BY price DESC
) डीईएससी कीवर्ड अवरोही क्रम को इंगित करता है।
उपरोक्त उदाहरण में, RANK () का उपयोग करके PARTITION BY द्वारा सेट किए गए परिणामों को उनकी श्रेणी द्वारा पत्रिकाओं के अलग-अलग समूहों में विभाजित किया गया है . प्रत्येक समूह के साथ, पंक्तियों को कीमत . द्वारा क्रमबद्ध किया गया था और फिर उस समूह में रैंक किया गया।