समस्या:
आपको उन पंक्तियों को खोजने की आवश्यकता है जिनमें समूहों के एक कॉलम में दिए गए मान से कम मानों का योग है।
उदाहरण:
हमारे डेटाबेस में company
निम्नलिखित कॉलम में डेटा के साथ:id
, department
, first_name
, last_name
, और salary
।
आईडी | विभाग | <थ>प्रथम_नामlast_name | <थ>वेतन||
---|---|---|---|---|
1 | विपणन | लोरा | भूरा | 2300 |
2 | वित्त | जॉन | जैक्सन | 3200 |
3 | विपणन | माइकल | थॉमसन | 1270 |
4 | उत्पादन | टोनी | मिलर | 6500 |
5 | उत्पादन | सैली | हरा | 2500 |
6 | वित्त | ओलिवियर | काला | 3450 |
7 | उत्पादन | जेनिफर | मिशेलिन | 2800 |
8 | विपणन | जेरेमी | लॉर्सन | 3600 |
9 | विपणन | लुई | स्मिथ | 4200 |
आइए उन विभागों के नाम खोजें जिनके कर्मचारियों के वेतन का योग 7000 से कम है।
समाधान:
SELECT department, SUM(salary) FROM company GROUP BY department HAVING SUM(salary)<7000;
ये रहा परिणाम:
विभाग | योग |
---|---|
वित्त | 6550 |
चर्चा:
एग्रीगेट फ़ंक्शन (पहले से फ़ंक्शन SUM) का उपयोग करके रिकॉर्ड फ़िल्टर करने के लिए, HAVING क्लॉज़ का उपयोग करें। पंक्तियों के प्रत्येक समूह के लिए मानों के योग की गणना करने के लिए, एकत्रीकरण SUM फ़ंक्शन का उपयोग करें। इस प्रश्न में, कॉलम विभाग की गणना एक समूह के रूप में अपने कर्मचारियों के सभी वेतनों के योग के साथ की जाती है (इसे एक तर्क के रूप में कॉलम वेतन के साथ SUM फ़ंक्शन के साथ गणना करें)। चूंकि आप पंक्तियों के प्रत्येक समूह के लिए मान की गणना करते हैं (हम विभाग के नाम के अनुसार पंक्तियों को समूहित करते हैं), क्वेरी में समूह पंक्तियों के नाम के साथ समूह द्वारा समूह होता है (हमारे उदाहरण में, GROUP BY department
) अंतिम चरण HAVING क्लॉज में कुल फ़ंक्शन का उपयोग कर रहा है। याद रखें, HAVING को GROUP BY क्लॉज के बाद रखा जाना चाहिए। HAVING में किसी दिए गए मान के साथ कुल फ़ंक्शन द्वारा लौटाए गए मान की तुलना करने की शर्त शामिल है। ऊपर से, यह 7000 से कम मान वाली वेतन राशि है (SUM(salary)<7000
) यहां, हम सत्यापित करते हैं कि प्रत्येक विभाग में वेतन राशि 7000 से कम है। क्वेरी में केवल एक विभाग, वित्त, 6550 के वेतन के साथ प्रदर्शित होता है।