TOP

SQL-पाठ 8. डेटा समूहीकरण (GROUP BY)

डेटा समूहीकरण आपको सभी डेटा को तार्किक सेटों में विभाजित करने की अनुमति देता है, जिससे प्रत्येक समूह में अलग से सांख्यिकीय गणना करना संभव हो जाता है।


1. समूह बनाना (GROUP BY)

समूह SELECT ऑपरेटर के GROUP BY कथन का उपयोग करके बनाए जाते हैं। आइए एक उदाहरण पर विचार करें.

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product

इस अनुरोध के साथ, हमने प्रत्येक माह बेचे गए उत्पादों की संख्या की जानकारी निकाली। ऑपरेटर SELECT दो कॉलम उत्पाद - उत्पाद का नाम और Product_num - गणना फ़ील्ड को आउटपुट करने का आदेश देता है जिसे हमने बेचे गए उत्पादों की मात्रा प्रदर्शित करने के लिए बनाया है (फ़ील्ड सूत्र SUM(Quantity))। GROUP BY क्लॉज DBMS को उत्पाद कॉलम द्वारा डेटा को समूहीकृत करने के लिए कहता है।

यह भी ध्यान देने योग्य है कि GROUP BY को WHERE क्लॉज के बाद और ORDER BY से पहले आना चाहिए।

2. फ़िल्टरिंग समूह (HAVING)

जैसे हम तालिका में पंक्तियों को फ़िल्टर करते हैं, वैसे ही हम समूहीकृत डेटा को फ़िल्टर कर सकते हैं। इसके लिए SQL में HAVING ऑपरेटर है। आइए पिछला उदाहरण लें और समूह फ़िल्टरिंग जोड़ें।

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product 
HAVING SUM(Quantity) > 4000

हम देख सकते हैं कि प्रत्येक उत्पाद के लिए बेची गई वस्तुओं की संख्या की गणना करने के बाद, डीबीएमएस ने उन उत्पादों को "काट दिया" जो 4,000 इकाइयों से कम बेचे गए थे।

जैसा कि आप देख सकते हैं, HAVING ऑपरेटर WHERE ऑपरेटर के समान है, लेकिन उनके बीच एक महत्वपूर्ण अंतर है: WHERE समूहीकृत होने से पहले डेटा को फ़िल्टर करता है, और समूहीकरण के बाद HAVING फ़िल्टर करता है। इस प्रकार, WHERE क्लॉज द्वारा हटाई गई पंक्तियाँ समूह में शामिल नहीं की जाएंगी। तो, WHERE और HAVING ऑपरेटरों का उपयोग एक ही वाक्य में किया जा सकता है। एक उदाहरण पर विचार करें:

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
WHERE Product <> 'Skis Long' 
GROUP BY Product 
HAVING SUM(Quantity) > 4000

हमने WHERE ऑपरेटर को पिछले उदाहरण में जोड़ा, जहां हमने उत्पाद "स्किस लॉन्ग" निर्दिष्ट किया था, जिसने बदले में HAVING ऑपरेटर द्वारा समूहीकरण को प्रभावित किया। परिणामस्वरूप, हम देख सकते हैं कि उत्पाद "स्किस लॉन्ग" ने 4,000 से अधिक बेचे गए उत्पादों वाले समूहों की सूची में जगह नहीं बनाई।

3. समूहीकरण एवं वर्गीकरण

सामान्य डेटा सैंपलिंग की तरह, हम HAVING ऑपरेटर के साथ समूह बनाने के बाद समूहों को सॉर्ट कर सकते हैं। इसके लिए हम पहले से परिचित ऑपरेटर ORDER BY का उपयोग कर सकते हैं। इस स्थिति में, इसका अनुप्रयोग पिछले उदाहरणों के समान है। उदाहरण:

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product 
HAVING SUM(Quantity) > 3000
ORDER BY SUM(Quantity)

या बस उस क्रम में फ़ील्ड संख्या निर्दिष्ट करें जिसमें हम सॉर्ट करना चाहते हैं:

Run SQLSELECT Product, SUM(Quantity) AS Product_num 
FROM Sumproduct 
GROUP BY Product 
HAVING SUM(Quantity) > 3000
ORDER BY 2

हम देखते हैं कि सारांश परिणामों को क्रमबद्ध करने के लिए, हमें ऑपरेटर HAVING के बाद केवल ORDER BY के साथ क्लॉज लिखना होगा।

MS Access कॉलम उपनामों द्वारा समूहों को क्रमबद्ध करने का समर्थन नहीं करता है, अर्थात, हमारे उदाहरण में, मानों को क्रमबद्ध करने के लिए, हम क्वेरी के अंत में ORDER BY Product_num नहीं लिख पाएंगे।