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