SQL GROUP BY और HAVING क्लॉज़ उदाहरणों के साथ
SQL ग्रुप बाय क्लॉज क्या है?
GROUP BY क्लॉज एक SQL कमांड है जिसका उपयोग निम्न के लिए किया जाता है समान मान वाली पंक्तियों को समूहीकृत करें. GROUP BY क्लॉज का उपयोग SELECT कथन में किया जाता है। वैकल्पिक रूप से इसका उपयोग डेटाबेस से सारांश रिपोर्ट बनाने के लिए एग्रीगेट फ़ंक्शन के साथ संयोजन में किया जाता है।
यह यही करता है, डेटा का सारांश डेटाबेस से.
जिन क्वेरीज़ में GROUP BY क्लॉज़ होता है, उन्हें समूहीकृत क्वेरीज़ कहा जाता है और वे प्रत्येक समूहीकृत आइटम के लिए केवल एक पंक्ति लौटाती हैं।
SQL ग्रुप बाय सिंटैक्स
अब जबकि हम जानते हैं कि SQL GROUP BY क्लॉज़ क्या है, तो आइए बुनियादी ग्रुप बाय क्वेरी के सिंटैक्स पर नज़र डालें।
SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];
यहाँ
- “SELECT कथन…” मानक SQL SELECT कमांड क्वेरी है।
- "समूह द्वारा कॉलम_नाम1"यह वह खंड है जो समूह को निष्पादित करता है।ping कॉलम_नाम1 के आधार पर।
- “[,column_name2,…]” वैकल्पिक है; यह समूह में अन्य कॉलम नामों को दर्शाता है।ping यह प्रक्रिया एक से अधिक कॉलम पर की जाती है।
- “[HAVING condition]” वैकल्पिक है; इसका उपयोग GROUP BY क्लॉज़ से प्रभावित पंक्तियों को प्रतिबंधित करने के लिए किया जाता है। यह इसी तरह का है कहां कारण.
Grouping एक का उपयोग एक स्तंभ
SQL Group By क्लॉज के प्रभाव को समझने में सहायता के लिए, आइए एक सरल क्वेरी निष्पादित करें जो सदस्य तालिका से सभी लिंग प्रविष्टियाँ लौटाती है।
SELECT `gender` FROM `members` ;
| gender |
|---|
| Female |
| Female |
| Male |
| Female |
| Male |
| Male |
| Male |
| Male |
| Male |
मान लीजिए कि हम लिंग के लिए अद्वितीय मान प्राप्त करना चाहते हैं। हम निम्नलिखित क्वेरी का उपयोग कर सकते हैं –
SELECT `gender` FROM `members` GROUP BY `gender`;
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL कार्यक्षेत्र Myflixdb के विरुद्ध हमें निम्नलिखित परिणाम प्राप्त होते हैं।
| gender |
|---|
| Female |
| Male |
ध्यान दें कि केवल दो परिणाम लौटाए गए हैं। ऐसा इसलिए है क्योंकि हमारे पास केवल दो लिंग प्रकार हैं पुरुष और महिला। SQL में GROUP BY क्लॉज़ ने सभी “पुरुष” सदस्यों को एक साथ समूहीकृत किया और इसके लिए केवल एक पंक्ति लौटाई। इसने “महिला” सदस्यों के साथ भी ऐसा ही किया।
Grouping का उपयोग कई कॉलम
मान लीजिए कि हम मूवी category_id और उनके रिलीज़ होने वाले वर्षों की सूची प्राप्त करना चाहते हैं।
आइये इस सरल क्वेरी के आउटपुट को देखें
SELECT `category_id`,`year_released` FROM `movies` ;
| category_id | year_released |
|---|---|
| 1 | 2011 |
| 2 | 2008 |
| NULL | 2008 |
| NULL | 2010 |
| 8 | 2007 |
| 6 | 2007 |
| 6 | 2007 |
| 8 | 2005 |
| NULL | 2012 |
| 7 | 1920 |
| 8 | NULL |
| 8 | 1920 |
उपरोक्त परिणाम के कई डुप्लिकेट हैं।
आइए SQL में group by का उपयोग करके समान क्वेरी निष्पादित करें –
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL myflixdb के विरुद्ध workbench का उपयोग करने से हमें नीचे दिखाए गए निम्नलिखित परिणाम प्राप्त होते हैं।
| category_id | year_released |
|---|---|
| NULL | 2008 |
| NULL | 2010 |
| NULL | 2012 |
| 1 | 2011 |
| 2 | 2008 |
| 6 | 2007 |
| 7 | 1920 |
| 8 | 1920 |
| 8 | 2005 |
| 8 | 2007 |
GROUP BY क्लॉज़ श्रेणी आईडी और जारी किए गए वर्ष दोनों पर काम करता है ताकि पहचान की जा सके अद्वितीय हमारे उपरोक्त उदाहरण में पंक्तियाँ।
यदि श्रेणी आईडी समान है, लेकिन जारी करने का वर्ष भिन्न है, तो पंक्ति को अद्वितीय माना जाता है। यदि श्रेणी आईडी और जारी करने का वर्ष एक से अधिक पंक्तियों के लिए समान है, तो इसे डुप्लिकेट माना जाता है और केवल एक पंक्ति दिखाई जाती है।
Grouping और समग्र कार्य
मान लीजिए कि हम अपने डेटाबेस में पुरुषों और महिलाओं की कुल संख्या जानना चाहते हैं। ऐसा करने के लिए हम नीचे दी गई स्क्रिप्ट का उपयोग कर सकते हैं।
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL वर्कबेंच को मायफ्लिक्सडीबी के विरुद्ध चलाने से हमें निम्नलिखित परिणाम प्राप्त होते हैं।
| gender | COUNT('membership_number') |
|---|---|
| Female | 3 |
| Male | 5 |
नीचे दिखाए गए परिणाम प्रत्येक अद्वितीय लिंग मान के आधार पर समूहीकृत किए गए हैं और समूहीकृत पंक्तियों की संख्या COUNT समग्र फ़ंक्शन का उपयोग करके गिनी गई है।
क्वेरी परिणामों को प्रतिबंधित करना होने धारा
ऐसा हमेशा नहीं होता कि हम समूह में प्रदर्शन करना चाहेंगे।pingकिसी दी गई तालिका के सभी डेटा पर आधारित विश्लेषण किया जाता है। कई बार हमें अपने परिणामों को किसी विशिष्ट मानदंड तक सीमित करने की आवश्यकता होगी। ऐसे मामलों में, हम HAVING क्लॉज़ का उपयोग कर सकते हैं।
मान लीजिए हम मूवी श्रेणी आईडी 8 के लिए सभी रिलीज वर्षों को जानना चाहते हैं। हम अपने परिणाम प्राप्त करने के लिए निम्नलिखित स्क्रिप्ट का उपयोग करेंगे।
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
उपरोक्त स्क्रिप्ट को निष्पादित करना MySQL Myflixdb के विरुद्ध वर्कबेंच का उपयोग करने से हमें नीचे दिखाए गए परिणाम प्राप्त होते हैं।
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 9 | Honey mooners | John Schultz | 2005 | 8 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
ध्यान दें कि केवल श्रेणी आईडी 8 वाली फिल्में ही हमारे GROUP BY क्लॉज से प्रभावित हुई हैं।
सारांश
- GROUP BY Clause SQL का उपयोग समान मान वाली पंक्तियों को समूहीकृत करने के लिए किया जाता है।
- GROUP BY क्लॉज का प्रयोग के साथ किया जाता है एसक्यूएल चयन कथन.
- GROUP BY क्लॉज में प्रयुक्त SELECT कथन का उपयोग केवल स्तंभ नाम, समग्र फ़ंक्शन, स्थिरांक और अभिव्यक्तियाँ रखने के लिए किया जा सकता है।
- SQL हैविंग क्लॉज का उपयोग GROUP BY क्लॉज द्वारा लौटाए गए परिणामों को प्रतिबंधित करने के लिए किया जाता है।
- MYSQL GROUP BY क्लॉज का उपयोग एकाधिक रिकॉर्ड्स से डेटा एकत्र करने और एक या अधिक कॉलम द्वारा सेट किए गए रिकॉर्ड को वापस करने के लिए किया जाता है।
