कभी-कभी आपको MySQL में विभाजन पर रैंक करने या MySQL में समूहीकृत रैंकिंग करने की आवश्यकता हो सकती है। हम देखेंगे कि MySQL रैंक फ़ंक्शन का उपयोग करके विभाजन को कैसे रैंक किया जाए। आप इस दृष्टिकोण का उपयोग प्रत्येक समूह/विभाजन के भीतर एक तालिका में अलग से रैंक करने के लिए कर सकते हैं। हालांकि, कृपया ध्यान दें, यह फ़ंक्शन केवल MySQL 8.0 से उपलब्ध है।
विभाजन पर MySQL रैंक
हम समूह के भीतर रैंक करने के लिए MySQL RANK () फ़ंक्शन का उपयोग करेंगे। यहाँ MySQL RANK फ़ंक्शन का सिंटैक्स है।
RANK() OVER ( PARTITION BY <expression>[{,<expression>...}] ORDER BY <expression> [ASC|DESC], [{,<expression>...}] )
रैंक फ़ंक्शन एक विभाजन के भीतर प्रत्येक पंक्ति को एक रैंक प्रदान करता है जैसे कि प्रत्येक पंक्ति की रैंक उस विभाजन में रैंक की गई पंक्तियों की कुल संख्या से एक अधिक होती है।
उपरोक्त सिंटैक्स में, पार्टिशन बाय क्लॉज पंक्तियों को विभाजनों में विभाजित करेगा। आप एक या अधिक कॉलम मानों के आधार पर तालिका को विभाजित कर सकते हैं। यदि आप तालिका को विभाजित नहीं करना चाहते हैं, तो आप केवल खंड द्वारा विभाजन को पूरी तरह से छोड़ सकते हैं।
बोनस पढ़ें :क्वेरी में MySQL समय क्षेत्र कैसे बदलें
रैंक फ़ंक्शन प्रत्येक विभाजन/समूह के भीतर रैंक की गणना करेगा और एक नए विभाजन के साथ शुरू करते समय रैंक संख्या को फिर से शुरू करेगा।
ORDER BY खंड एक या अधिक स्तंभों में मानों के आधार पर प्रत्येक विभाजन के भीतर पंक्तियों को क्रमबद्ध करता है।
बोनस पढ़ें :MySQL डेटाबेस की तुलना करें
मान लें कि आपके पास निम्न तालिका है।
mysql> create table for_rank(id int, month varchar(10),amount int); mysql> insert into for_rank(id, month, amount) values(1,'Jan',450), (2,'Jan',350), (3,'Jan',250), (4,'Feb',150), (5,'Feb',450), (6,'Feb',500), (7,'Mar',350), (8,'Mar',450), (9,'Mar',250), (10,'Mar',150); mysql> select * from for_rank; +------+-------+--------+ | id | month | amount | +------+-------+--------+ | 1 | Jan | 450 | | 2 | Jan | 350 | | 3 | Jan | 250 | | 4 | Feb | 150 | | 5 | Feb | 450 | | 6 | Feb | 500 | | 7 | Mar | 350 | | 8 | Mar | 450 | | 9 | Mar | 250 | | 10 | Mar | 150 | +------+-------+--------+
बोनस पढ़ें :MySQL डेटाबेस में इंडेक्स दिखाएँ
तालिका की प्रत्येक पंक्ति को किसी भी पार्टिशन बाय क्लॉज का उपयोग किए बिना रैंक प्रदान करने की क्वेरी यहां दी गई है।
SELECT id, month, amount, RANK() OVER ( PARTITION BY Month ORDER BY amount desc ) my_rank FROM for_rank; +------+-------+--------+--------+ | id | month | amount | rank | +------+-------+--------+--------+ | 6 | Feb | 500 | 1 | | 5 | Feb | 450 | 2 | | 4 | Feb | 150 | 3 | | 1 | Jan | 450 | 1 | | 2 | Jan | 350 | 2 | | 3 | Jan | 250 | 3 | | 8 | Mar | 450 | 1 | | 7 | Mar | 350 | 2 | | 9 | Mar | 250 | 3 | | 10 | Mar | 150 | 4 | +------+-------+--------+--------+
उपरोक्त क्वेरी में, हम तालिका को महीने के नाम से विभाजित करते हैं, और फिर प्रत्येक विभाजन के भीतर प्रत्येक पंक्ति को राशि के अवरोही क्रम में रैंक करते हैं।
उम्मीद है कि अब आप विभाजन और समूहों पर रैंक करने के लिए आसानी से MySQL रैंक फ़ंक्शन का उपयोग कर सकते हैं।
Ubiq मिनटों में डेटा को विज़ुअलाइज़ करना और रीयल-टाइम डैशबोर्ड में मॉनिटर करना आसान बनाता है। इसे आज ही आजमाएं!