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

MySQL में विभाजन से अधिक रैंक कैसे करें

कभी-कभी आपको 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 मिनटों में डेटा को विज़ुअलाइज़ करना और रीयल-टाइम डैशबोर्ड में मॉनिटर करना आसान बनाता है। इसे आज ही आजमाएं!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक MYSQL क्वेरी निष्पादित करने के लिए PHP का उपयोग करना

  2. MySQL दिनांक स्वरूप निर्दिष्टकर्ताओं की सूची

  3. UTF8 के साथ MySQL कमांड लाइन फ़ॉर्मेटिंग

  4. MySQL में SET autocommit=1 और START TRANSACTION के बीच अंतर (क्या मैंने कुछ याद किया है?)

  5. mysqldump सर्वोत्तम अभ्यास:भाग 2 - माइग्रेशन गाइड