समूह कार्यों का उपयोग करना
समूह कार्यों का उपयोग करके डेटा एकत्र करना
SQL में कई पूर्वनिर्धारित समग्र कार्य हैं जिनका उपयोग इस तरह की सूचनाओं का उत्पादन करने के लिए प्रश्नों को लिखने के लिए किया जा सकता है। GROUP BY क्लॉज यह निर्दिष्ट करता है कि जानकारी एकत्रित करते समय डेटा टेबल से पंक्तियों को कैसे समूहित किया जाए, जबकि HAVING क्लॉज उन पंक्तियों को फ़िल्टर करता है जो उनके नहीं हैं निर्दिष्ट समूह।
एकत्रित कार्य कई प्रकार की क्रियाएं करते हैं जैसे किसी तालिका में सभी पंक्तियों को गिनना, स्तंभ के डेटा का औसत और संख्यात्मक डेटा को समेटना। किसी कॉलम में उच्चतम "MAX" या निम्नतम "MIN" मानों को खोजने के लिए तालिकाएँ भी खोज सकते हैं। अन्य प्रकार के प्रश्नों के साथ, आप उन पंक्तियों को प्रतिबंधित या फ़िल्टर कर सकते हैं, जिन पर ये कार्य WHERE क्लॉज़ के साथ कार्य करते हैं। उदाहरण के लिए, यदि किसी प्रबंधक को यह जानना है कि किसी संगठन में कितने कर्मचारी काम करते हैं, तो COUNT (*) नामक कुल फ़ंक्शन का उपयोग इस जानकारी को उत्पन्न करने के लिए किया जा सकता है। नीचे दिए गए चयन कथन में दिखाया गया COUNT (*) फ़ंक्शन सभी पंक्तियों को एक में गिनता है तालिका।
SELECT COUNT(*)
FROM employees;
COUNT(*)
----------
24
COUNT (*) फ़ंक्शन के लिए परिणाम तालिका एकल पंक्ति से एक एकल स्तंभ है जिसे स्केलर परिणाम या मान के रूप में जाना जाता है। ध्यान दें कि परिणाम तालिका में एक कॉलम हेडिंग है जो SELECT क्लॉज में निर्दिष्ट कुल फ़ंक्शन के नाम से मेल खाती है।
आमतौर पर उपयोग किए जाने वाले कुल कार्यों में से कुछ नीचे दिए गए हैं -
SUM( [ALL | DISTINCT] expression )
AVG( [ALL | DISTINCT] expression )
COUNT( [ALL | DISTINCT] expression )
COUNT(*)
MAX(expression)
MIN(expression)
ALL और DISTINCT कीवर्ड वैकल्पिक हैं, और जैसा कि आपने लिखना सीखा है कि चयन खंडों के साथ प्रदर्शन करते हैं। सभी कीवर्ड डिफ़ॉल्ट हैं जहां विकल्प की अनुमति है। वाक्यविन्यास में सूचीबद्ध अभिव्यक्ति एक स्थिर, एक फ़ंक्शन हो सकती है, या स्तंभों के नाम, स्थिरांक, और अंकगणितीय संचालकों द्वारा जुड़े कार्यों का कोई संयोजन। जो भी हो, कुल मिलाकर फ़ंक्शन अक्सर स्तंभ नाम के साथ उपयोग किए जाते हैं। COUNT फ़ंक्शन को छोड़कर, सभी कुल फ़ंक्शन NULL मानों पर विचार नहीं करते हैं।
समुच्चय का उपयोग करते समय दो नियम हैं जिन्हें आपको समझना चाहिए और उनका पालन करना चाहिए:
सकल कार्यों को SELECT और HAVING क्लॉज़ (HAVING क्लॉज़ को इस अध्याय में बाद में कवर किया गया है) दोनों में इस्तेमाल किया जा सकता है।
एग्रीगेट फ़ंक्शंस का उपयोग WHERE क्लॉज़ में नहीं किया जा सकता है। इसका उल्लंघन Oracle ORA-00934 समूह फ़ंक्शन का उत्पादन करेगा यहां त्रुटि संदेश की अनुमति नहीं है।
रेखांकन
नीचे चयनित क्वेरी संगठन में कर्मचारियों की संख्या को गिनाती है।
SELECT COUNT(*) Count
FROM employees;
COUNT
-----
24
नीचे चयनित क्वेरी संगठन में कर्मचारियों के वेतन का औसत लौटाती है।
SELECT AVG(Salary) average_sal
FROM employees;
AVERAGE_SAL
-----------
15694
नीचे चयनित क्वेरी संगठन में कर्मचारियों के वेतन का योग लौटाती है।
SELECT SUM(Salary) total_sal
FROM employees;
TOTAL_SAL
---------
87472
नीचे चयनित क्वेरी संगठन में कर्मचारियों की सबसे पुरानी और नवीनतम किराए पर ली गई तारीखें लौटाती है।
SELECT MIN (hire_date) oldest, MAX (hire_date) latest
FROM employees;
OLDEST LATEST
--------- -----------
16-JAN-83 01-JUL-2012
समूह द्वारा
अलग-अलग कार्यों का उपयोग आम तौर पर एक ग्रुप बीओ क्लॉज के संयोजन में किया जाता है। ग्रुप बाय क्लॉज आपको अधिक जटिल प्रबंधकीय सवालों के जवाब देने के लिए कुल कार्यों का उपयोग करने में सक्षम बनाता है जैसे:
प्रत्येक विभाग में कर्मचारियों का औसत वेतन क्या है?
प्रत्येक विभाग में कितने कर्मचारी काम करते हैं?
किसी विशेष परियोजना पर कितने कर्मचारी काम कर रहे हैं?
फ़ंक्शन द्वारा समूह कॉलम के आधार पर डेटा समूह स्थापित करता है और केवल एक समूह के भीतर जानकारी एकत्र करता है। ग्रुपिंग मानदंड ग्रुप बीओ क्लॉज में निर्दिष्ट कॉलम द्वारा परिभाषित किया गया है। इस पदानुक्रम के बाद, डेटा को पहले समूहों में व्यवस्थित किया जाता है और फिर प्रत्येक समूह में पंक्तियों को प्रतिबंधित किया जाता है।
ग्रुप बाय क्लॉज का उपयोग करने के दिशानिर्देश
(1) ग्रुप बाय फंक्शन में इस्तेमाल होने वाले सभी आश्रित कॉलम या कॉलम को ग्रुपिंग का आधार बनाना चाहिए, इसलिए ग्रुप बाय क्लॉज में भी शामिल होना चाहिए।
SELECT DEPARTMENT_ID, SUM(SALARY)
FROM employees;
DEPARTMENT_ID,
*
ERROR at line 2:
ORA-00937: not a single-group group function
(२) ग्रुप बीओ क्लॉज कॉलम उर्फ के उपयोग का समर्थन नहीं करता है, लेकिन वास्तविक नाम।
(3) ग्रुप बाय क्लॉज केवल SUM, AVG, COUNT, MAX, और MIN जैसे समग्र कार्यों के साथ उपयोग किया जा सकता है। यदि इसका उपयोग एकल पंक्ति फ़ंक्शन के साथ किया जाता है, तो Oracle "ORA-00979: अभिव्यक्ति के लिए एक समूह नहीं" के रूप में एक अपवाद को फेंक देता है। ।
(4) एक समूह द्वारा खंड में सकल कार्यों का उपयोग नहीं किया जा सकता है। ओरेकल "ओआरए-00934: समूह फ़ंक्शन को अनुमति नहीं है" यहां त्रुटि संदेश लौटाएगा।
नीचे क्वेरी प्रत्येक विभाग में काम करने वाले कर्मचारियों की गिनती को सूचीबद्ध करती है।
SELECT DEPARTMENT_ID, COUNT (*)
FROM employees
GROUP BY DEPARTMENT_ID;
इसी तरह, प्रत्येक विभाग में संबंधित नौकरी आईडी के लिए वेतन की राशि खोजने के लिए क्वेरी के नीचे। ध्यान दें कि समूह विभाग और जॉब आईडी के आधार पर स्थापित किया गया है। इसलिए वे GROUP BY क्लॉज में दिखाई देते हैं।
SELECT DEPARTMENT_ID, JOB_ID, SUM (SAL)
FROM employees
GROUP BY DEPARTMENT_ID, JOB_ID;
नीचे दिया गया क्वेरी समान परिणाम भी उत्पन्न करता है। कृपया ध्यान दें कि समूहीकरण विभाग आईडी और नौकरी आईडी कॉलम पर आधारित है, लेकिन प्रदर्शन उद्देश्य के लिए उपयोग नहीं किया जाता है।
SELECT SUM (SALARY)
FROM employees
GROUP BY DEPARTMENT_ID, JOB_ID;
DISTINCT का उपयोग, सकल कार्यों के साथ सभी कीवर्ड
इनपुट पैरामीटर के साथ DISTINCT कीवर्ड निर्दिष्ट करके, फ़ंक्शन द्वारा समूह एकत्रीकरण के लिए कॉलम का केवल अद्वितीय मूल्य मानता है। इनपुट पैरामीटर के साथ सभी कीवर्ड को निर्दिष्ट करके, फ़ंक्शन द्वारा समूह, शून्य और डुप्लिकेट सहित एकत्रीकरण के लिए कॉलम के सभी मूल्यों पर विचार करता है। सभी डिफ़ॉल्ट विनिर्देश है।
HAVING खंड
HAVING क्लॉज का उपयोग समान कार्यों के लिए किया जाता है, जिसमें WHERE क्लॉज का उपयोग कॉलम नामों और अभिव्यक्तियों के लिए किया जाता है। मूल रूप से, HAVING और WHERE क्लॉज एक ही कार्य करते हैं, जो एक शर्त के आधार पर परिणाम तालिका में शामिल किए जाने से फिल्टर पंक्तियाँ होती हैं। । हालांकि यह प्रतीत हो सकता है कि एक HAVING क्लॉज समूहों को फ़िल्टर करता है, यह नहीं करता है। बल्कि, एक HAVING क्लॉज पंक्तियों को फ़िल्टर करता है।
जब किसी समूह के लिए सभी पंक्तियों को समाप्त कर दिया जाता है तो समूह होता है। संक्षेप में, WHERE और HAVING क्लॉस के बीच महत्वपूर्ण अंतर इस प्रकार हैं:
एक समूह का उपयोग पंक्तियों को फ़िल्टर करने के लिए किया जाता है ताकि समूहन क्रिया (यानी, कुल कार्यों की गणना से पहले) हो।
एक HAVING क्लॉज पंक्तियों को ग्रुपिंग एक्शन (यानी, एग्रीगेट फंक्शंस की गणना के बाद) के अनुसार फिल्टर करता है।
SELECT JOB_ID, SUM (SALARY)
FROM employees
GROUP BY JOB_ID
HAVING SUM (SALARY) > 10000;
HAVING क्लॉज एक सशर्त विकल्प है जो सीधे GROUP BY क्लॉज विकल्प से संबंधित होता है क्योंकि एक HAVING क्लॉज एक परिणामी तालिका से पंक्तियों को समूह BY क्लॉज के परिणाम के आधार पर समाप्त कर देता है।
SELECT department_id, AVG(Salary)
FROM employees
HAVING AVG(Salary) > 33000;
ERROR at line 1: ORA-00937: not a single-group group function