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

MySQL में प्रति समूह शीर्ष एन पंक्तियों का चयन कैसे करें

कभी-कभी आपको MySQL में प्रत्येक समूह से शीर्ष N पंक्तियों का चयन करने की आवश्यकता हो सकती है। यहाँ MySQL में प्रति समूह शीर्ष N पंक्तियों का चयन करने का तरीका बताया गया है। आप इसका उपयोग प्रति समूह शीर्ष n परिणाम प्राप्त करने के लिए कर सकते हैं, प्रत्येक श्रेणी के लिए शीर्ष 10 रिकॉर्ड का चयन कर सकते हैं या प्रत्येक समूह का पहला रिकॉर्ड चुन सकते हैं।

MySQL प्रति समूह शीर्ष N पंक्तियों का चयन करें

यहां प्रति समूह शीर्ष एन पंक्तियों का चयन करने के चरण दिए गए हैं। मान लें कि आपके पास निम्न तालिका है आदेश (आईडी, उत्पाद, राशि)

mysql> create table product_orders(id int,product varchar(255),amount int);

mysql> insert into product_orders(id, product, amount)
     values(1,'A',250),(2,'B',150),(3,'C',200),
     (4,'A',250),(5,'B',210),(6,'C',125),
     (7,'A',350),(8,'B',225),(9,'C',150);


mysql> select * from product_orders;
+------+---------+--------+
| id   | product | amount |
+------+---------+--------+
|    1 | A       |    250 |
|    2 | B       |    150 |
|    3 | C       |    200 |
|    4 | A       |    250 |
|    5 | B       |    210 |
|    6 | C       |    125 |
|    7 | A       |    350 |
|    8 | B       |    225 |
|    9 | C       |    150 |
+------+---------+--------+

बोनस पढ़ें :MySQL में पिछले सप्ताह का डेटा कैसे प्राप्त करें

MySQL में प्रति समूह शीर्ष N पंक्तियों का चयन कैसे करें

सबसे पहले, हम प्रत्येक पंक्ति को उसके समूह में रैंक करेंगे (उत्पाद कॉलम) निम्न SQL क्वेरी का उपयोग करके।

mysql> SELECT id, product, amount,
            @product_rank := IF(@current_product = product, @product_rank + 1, 1) 
             AS product_rank,
            @current_product := product
       FROM product_orders
       ORDER BY product, amount desc;
+------+---------+--------+--------------+-----------------------------+
| id   | product | amount | product_rank | @current_product := product |
+------+---------+--------+--------------+-----------------------------+
|    7 | A       |    350 |            1 | A                           |
|    1 | A       |    250 |            2 | A                           |
|    4 | A       |    250 |            3 | A                           |
|    8 | B       |    225 |            1 | B                           |
|    5 | B       |    210 |            2 | B                           |
|    2 | B       |    150 |            3 | B                           |
|    3 | C       |    200 |            1 | C                           |
|    9 | C       |    150 |            2 | C                           |
|    6 | C       |    125 |            3 | C                           |
+------+---------+--------+--------------+-----------------------------+

उपरोक्त क्वेरी में, हमने पहले प्रत्येक रिकॉर्ड को उसके समूह के भीतर राशि कॉलम द्वारा अवरोही क्रम में क्रमबद्ध किया है, और फिर उसे रैंक किया है। यदि आप इसे राशियों के आरोही क्रम में क्रमबद्ध करना चाहते हैं, तो आप ORDER by खण्ड को बदलकर ऐसा कर सकते हैं।

SELECT id, product, amount, 
       @product_rank := IF(@current_product = product, @product_rank + 1, 1) 
       AS product_rank,
       @current_product := product 
  FROM product_orders
  ORDER BY product, amount asc;

इसके बाद, हम उपरोक्त क्वेरी का उपयोग एक सबक्वेरी के रूप में करते हैं, प्रति समूह शीर्ष N पंक्तियों का चयन करने के लिए (उदाहरण के लिए प्रत्येक श्रेणी के लिए शीर्ष 2 पंक्तियाँ)।

बोनस पढ़ें:MySQL कॉपी डेटाबेस

प्रति समूह शीर्ष 2 पंक्तियों का चयन कैसे करें

उपरोक्त विधि का उपयोग करके प्रत्येक समूह के लिए शीर्ष 2 पंक्तियों का चयन करने के लिए यहां SQL क्वेरी है। हम उपरोक्त क्वेरी को सबक्वेरी के रूप में उपयोग करेंगे और उन पंक्तियों का चयन करेंगे जिनकी रैंक 2 से कम या उसके बराबर है।

mysql> select id, product, amount from (
         SELECT id, product, amount,
            @product_rank := IF(@current_product = product, @product_rank + 1, 1) 
             AS product_rank,
            @current_product := product
         FROM product_orders
         ORDER BY product, amount desc) ranked_rows
       where product_rank<=2;
+------+---------+--------+
| id   | product | amount |
+------+---------+--------+
|    7 | A       |    350 |
|    1 | A       |    250 |
|    8 | B       |    225 |
|    5 | B       |    210 |
|    3 | C       |    200 |
|    9 | C       |    150 |
+------+---------+--------+

बोनस पढ़ें :MySQL इन्सर्ट इन सेलेक्ट

प्रति समूह शीर्ष 10 पंक्तियों का चयन कैसे करें

इसी तरह, आप निम्न क्वेरी का उपयोग करके प्रत्येक समूह से शीर्ष 10 पंक्तियों का चयन कर सकते हैं।

mysql> select id, product, amount from (
         SELECT id, product, amount,
            @product_rank := IF(@current_product = product, @product_rank + 1, 1) 
             AS product_rank,
            @current_product := product
         FROM product_orders
         ORDER BY product, amount desc) ranked_rows
       where product_rank<=10;

उम्मीद है, अब आप आसानी से 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. हाइब्रिड OLTP/Analytics डेटाबेस वर्कलोड:MySQL डेटा को ClickHouse में रेप्लिकेट करना

  2. एक टेबल में कई रैंक

  3. MySQL 1062 - कुंजी 'प्राथमिक' के लिए डुप्लिकेट प्रविष्टि '0'

  4. MySQL कॉलम का नाम बदलें

  5. MySQL में टाइमस्टैम्प को कैसे राउंड करें