एसक्यूएल ग्रुप बाय स्टेटमेंट के बारे में आपको जो कुछ पता होना चाहिए

एसक्यूएल ग्रुप बाय स्टेटमेंट के बारे में आपको जो कुछ पता होना चाहिए

रिलेशनल डेटाबेस की अधिकांश शक्ति डेटा को फ़िल्टर करने और तालिकाओं को एक साथ जोड़ने से आती है। यही कारण है कि हम सबसे पहले उन संबंधों का प्रतिनिधित्व करते हैं। लेकिन आधुनिक डेटाबेस सिस्टम एक और मूल्यवान तकनीक प्रदान करते हैं: समूहीकरण।





समूहीकरण आपको डेटाबेस से सारांश जानकारी निकालने की अनुमति देता है। यह आपको उपयोगी सांख्यिकीय डेटा बनाने के लिए परिणामों को संयोजित करने देता है। समूहीकरण आपको सामान्य मामलों जैसे आंकड़ों की औसत सूची के लिए कोड लिखने से बचाता है। और यह अधिक कुशल प्रणालियों के लिए बना सकता है।





ग्रुप बाय क्लॉज क्या करता है?

GROUP BY, जैसा कि नाम से पता चलता है, समूह एक छोटे समूह में परिणत होते हैं। परिणामों में समूहीकृत स्तंभ के प्रत्येक विशिष्ट मान के लिए एक पंक्ति होती है। हम कुछ सामान्य मूल्यों को साझा करने वाली पंक्तियों के साथ कुछ नमूना डेटा को देखकर इसका उपयोग दिखा सकते हैं।





छुट्टियों के लिए पैसे बचाने के लिए ऐप्स

रिकॉर्ड एल्बम का प्रतिनिधित्व करने वाली दो तालिकाओं के साथ निम्नलिखित एक बहुत ही सरल डेटाबेस है। आप इस तरह के डेटाबेस को सेट कर सकते हैं एक बुनियादी स्कीमा लिखना आपके चुने हुए डेटाबेस सिस्टम के लिए। NS एलबम तालिका में प्राथमिक कुंजी के साथ नौ पंक्तियाँ हैं पहचान नाम, कलाकार, रिलीज का वर्ष और बिक्री के लिए कॉलम और कॉलम:

+----+---------------------------+-----------+--------------+-------+
| id | name | artist_id | release_year | sales |
+----+---------------------------+-----------+--------------+-------+
| 1 | Abbey Road | 1 | 1969 | 14 |
| 2 | The Dark Side of the Moon | 2 | 1973 | 24 |
| 3 | Rumours | 3 | 1977 | 28 |
| 4 | Nevermind | 4 | 1991 | 17 |
| 5 | Animals | 2 | 1977 | 6 |
| 6 | Goodbye Yellow Brick Road | 5 | 1973 | 8 |
| 7 | 21 | 6 | 2011 | 25 |
| 8 | 25 | 6 | 2015 | 22 |
| 9 | Bat Out of Hell | 7 | 1977 | 28 |
+----+---------------------------+-----------+--------------+-------+

NS कलाकार की तालिका और भी सरल है। इसमें आईडी और नाम कॉलम के साथ सात पंक्तियाँ हैं:



+----+---------------+
| id | name |
+----+---------------+
| 1 | The Beatles |
| 2 | Pink Floyd |
| 3 | Fleetwood Mac |
| 4 | Nirvana |
| 5 | Elton John |
| 6 | Adele |
| 7 | Meat Loaf |
+----+---------------+

आप इस तरह के एक साधारण डेटा सेट के साथ ग्रुप बाय के विभिन्न पहलुओं को समझ सकते हैं। बेशक, एक वास्तविक जीवन डेटा सेट में कई, कई और पंक्तियाँ होंगी, लेकिन सिद्धांत समान रहते हैं।

एकल कॉलम द्वारा समूहीकरण

मान लीजिए कि हम यह पता लगाना चाहते हैं कि हमारे पास प्रत्येक कलाकार के लिए कितने एल्बम हैं। एक ठेठ के साथ शुरू करें चुनते हैं कलाकार_आईडी कॉलम लाने के लिए क्वेरी:





SELECT artist_id FROM albums

यह सभी नौ पंक्तियों को लौटाता है, जैसा कि अपेक्षित था:

+-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 2 |
| 5 |
| 6 |
| 6 |
| 7 |
+-----------+

इन परिणामों को कलाकार द्वारा समूहीकृत करने के लिए, वाक्यांश जोड़ें कलाकार_आईडी . द्वारा समूह :





SELECT artist_id FROM albums GROUP BY artist_id

जो निम्नलिखित परिणाम देता है:

+-----------+
| artist_id |
+-----------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
+-----------+

परिणाम सेट में सात पंक्तियाँ हैं, जो कुल नौ से घटाई गई हैं एलबम टेबल। प्रत्येक अद्वितीय कलाकार_आईडी एक ही पंक्ति है। अंत में, वास्तविक गणना प्राप्त करने के लिए, जोड़ें COUNT(*) चयनित कॉलम के लिए:

SELECT artist_id, COUNT(*)
FROM albums
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
+-----------+----------+

परिणाम समूह आईडी वाले कलाकारों के लिए पंक्तियों के दो जोड़े 2 तथा 6 . हमारे डेटाबेस में प्रत्येक के दो एल्बम हैं।

सम्बंधित: शुरुआती के लिए आवश्यक एसक्यूएल कमांड चीट शीट

एक समग्र कार्य के साथ समूहीकृत डेटा तक कैसे पहुँचें

हो सकता है कि आपने का इस्तेमाल किया हो गिनती पहले समारोह, विशेष रूप से में COUNT(*) जैसा कि ऊपर देखा गया है। यह एक सेट में परिणामों की संख्या प्राप्त करता है। आप किसी तालिका में रिकॉर्ड की कुल संख्या प्राप्त करने के लिए इसका उपयोग कर सकते हैं:

SELECT COUNT(*) FROM albums
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+

COUNT एक समग्र कार्य है। यह शब्द उन कार्यों को संदर्भित करता है जो कई पंक्तियों से मूल्यों को एक मान में अनुवादित करते हैं। उनका उपयोग अक्सर GROUP BY कथन के संयोजन में किया जाता है।

केवल पंक्तियों की संख्या गिनने के बजाय, हम समूहीकृत मानों पर एक समग्र कार्य लागू कर सकते हैं:

SELECT artist_id, SUM(sales)
FROM albums
GROUP BY artist_id
+-----------+------------+
| artist_id | SUM(sales) |
+-----------+------------+
| 1 | 14 |
| 2 | 30 |
| 3 | 28 |
| 4 | 17 |
| 5 | 8 |
| 6 | 47 |
| 7 | 28 |
+-----------+------------+

कलाकारों २ और ६ के लिए ऊपर दिखाई गई कुल बिक्री उनके कई एल्बमों की संयुक्त बिक्री है:

SELECT artist_id, sales
FROM albums
WHERE artist_id IN (2, 6)
+-----------+-------+
| artist_id | sales |
+-----------+-------+
| 2 | 24 |
| 2 | 6 |
| 6 | 25 |
| 6 | 22 |
+-----------+-------+

एकाधिक कॉलम द्वारा समूहीकरण

आप एक से अधिक कॉलम के आधार पर समूह बना सकते हैं। बस अल्पविराम से अलग किए गए एकाधिक कॉलम या एक्सप्रेशन शामिल करें। परिणाम इन स्तंभों के संयोजन के अनुसार समूहित होंगे।

SELECT release_year, sales, count(*)
FROM albums
GROUP BY release_year, sales

यह आम तौर पर एक कॉलम द्वारा समूहबद्ध करने से अधिक परिणाम देगा:

+--------------+-------+----------+
| release_year | sales | count(*) |
+--------------+-------+----------+
| 1969 | 14 | 1 |
| 1973 | 24 | 1 |
| 1977 | 28 | 2 |
| 1991 | 17 | 1 |
| 1977 | 6 | 1 |
| 1973 | 8 | 1 |
| 2011 | 25 | 1 |
| 2015 | 22 | 1 |
+--------------+-------+----------+

ध्यान दें कि, हमारे छोटे से उदाहरण में, केवल दो एल्बमों का रिलीज़ वर्ष और बिक्री की संख्या समान है (1977 में 28)।

उपयोगी कुल कार्य

COUNT के अलावा, GROUP के साथ कई कार्य अच्छी तरह से काम करते हैं। प्रत्येक फ़ंक्शन प्रत्येक परिणाम समूह से संबंधित रिकॉर्ड के आधार पर एक मान देता है।

  • COUNT() मिलान करने वाले रिकॉर्ड की कुल संख्या देता है।
  • SUM() जोड़े गए दिए गए कॉलम में सभी मानों का कुल योग देता है।
  • MIN() किसी दिए गए कॉलम में सबसे छोटा मान देता है।
  • MAX() किसी दिए गए कॉलम में सबसे बड़ा मान देता है।
  • AVG () माध्य औसत देता है। यह SUM () / COUNT () के बराबर है।

आप ग्रुप क्लॉज के बिना भी इन कार्यों का उपयोग कर सकते हैं:

अपना मूल नाम कैसे बदलें
SELECT AVG(sales) FROM albums
+------------+
| AVG(sales) |
+------------+
| 19.1111 |
+------------+

WHERE क्लॉज के साथ GROUP BY का उपयोग करना

सामान्य चयन की तरह, आप अभी भी परिणाम सेट को फ़िल्टर करने के लिए WHERE का उपयोग कर सकते हैं:

SELECT artist_id, COUNT(*)
FROM albums
WHERE release_year > 1990
GROUP BY artist_id
+-----------+----------+
| artist_id | COUNT(*) |
+-----------+----------+
| 4 | 1 |
| 6 | 2 |
+-----------+----------+

अब आपके पास केवल वे एल्बम हैं जो 1990 के बाद रिलीज़ हुए हैं, जिन्हें कलाकार द्वारा समूहीकृत किया गया है। आप ग्रुप बाय से स्वतंत्र रूप से, WHERE क्लॉज के साथ जुड़ने का भी उपयोग कर सकते हैं:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
+---------+--------+
| name | albums |
+---------+--------+
| Nirvana | 1 |
| Adele | 2 |
+---------+--------+

हालांकि, ध्यान दें कि यदि आप एक समेकित कॉलम के आधार पर फ़िल्टर करने का प्रयास करते हैं:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND albums > 2
GROUP BY artist_id;

आपको एक त्रुटि मिलेगी:

ERROR 1054 (42S22): Unknown column 'albums' in 'where clause'

कुल डेटा पर आधारित कॉलम WHERE क्लॉज के लिए उपलब्ध नहीं हैं।

HAVING क्लॉज का उपयोग करना

तो, समूहीकरण होने के बाद सेट किए गए परिणाम को आप कैसे फ़िल्टर करते हैं? NS होना खंड इस आवश्यकता से संबंधित है:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
GROUP BY artist_id
HAVING albums > 1;

ध्यान दें कि HAVING क्लॉज GROUP BY के बाद आता है। अन्यथा, यह अनिवार्य रूप से WHERE के साथ HAVING का एक सरल प्रतिस्थापन है। परिणाम हैं:

+------------+--------+
| name | albums |
+------------+--------+
| Pink Floyd | 2 |
| Adele | 2 |
+------------+--------+

समूहीकरण से पहले परिणामों को फ़िल्टर करने के लिए आप अभी भी WHERE शर्त का उपयोग कर सकते हैं। यह ग्रुपिंग के बाद फ़िल्टरिंग के लिए HAVING क्लॉज के साथ मिलकर काम करेगा:

SELECT r.name, COUNT(*) AS albums
FROM albums l, artists r
WHERE artist_id=r.id
AND release_year > 1990
GROUP BY artist_id
HAVING albums > 1;

हमारे डेटाबेस में केवल एक कलाकार ने 1990 के बाद एक से अधिक एल्बम जारी किए:

+-------+--------+
| name | albums |
+-------+--------+
| Adele | 2 |
+-------+--------+

GROUP BY के साथ परिणामों का संयोजन

ग्रुप बाय स्टेटमेंट SQL भाषा का एक अविश्वसनीय रूप से उपयोगी हिस्सा है। उदाहरण के लिए, यह सामग्री पृष्ठ के लिए डेटा की सारांश जानकारी प्रदान कर सकता है। यह बड़ी मात्रा में डेटा प्राप्त करने का एक उत्कृष्ट विकल्प है। डेटाबेस इस अतिरिक्त कार्यभार को अच्छी तरह से संभालता है क्योंकि इसका डिज़ाइन ही इसे कार्य के लिए इष्टतम बनाता है।

एक बार जब आप समूहीकरण और एकाधिक तालिकाओं में शामिल होने के तरीके को समझ लेते हैं, तो आप संबंधपरक डेटाबेस की अधिकांश शक्ति का उपयोग करने में सक्षम होंगे।

साझा करना साझा करना कलरव ईमेल SQL जॉइन के साथ एक साथ कई डेटाबेस टेबल्स को कैसे क्वेरी करें

प्रश्नों को सुव्यवस्थित करने, समय बचाने और आपको SQL पावर उपयोगकर्ता की तरह महसूस कराने के लिए SQL जॉइन का उपयोग करना सीखें।

आप 3डी प्रिंटर के साथ क्या कर सकते हैं
आगे पढ़िए संबंधित विषय
  • प्रोग्रामिंग
  • एसक्यूएल
लेखक के बारे में बॉबी जैक(58 लेख प्रकाशित)

बॉबी एक प्रौद्योगिकी उत्साही हैं जिन्होंने दो दशकों तक एक सॉफ्टवेयर डेवलपर के रूप में काम किया। उन्हें गेमिंग का शौक है, स्विच प्लेयर मैगज़ीन में समीक्षा संपादक के रूप में काम कर रहे हैं, और ऑनलाइन प्रकाशन और वेब विकास के सभी पहलुओं में डूबे हुए हैं।

बॉबी जैक . की अन्य फ़िल्में-टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें