समस्या:
आप उन पंक्तियों के समूह खोजना चाहते हैं जिनमें किसी स्तंभ में मानों का औसत किसी दिए गए मान से अधिक या कम हो।
उदाहरण:
हमारे डेटाबेस में product
निम्नलिखित कॉलम में डेटा के साथ:id
, name
, grocery
और price
।
आईडी | <थ>नामकिराने | कीमत | |
---|---|---|---|
1 | दूध | ग्रीन शॉप | 2.34 |
2 | रोटी | क्लार्क किराना | 3.56 |
3 | रोटी | सुपर मार्केट | 4.15 |
4 | दूध | सुपर मार्केट | 1.80 |
5 | रोटी | किराना अमांडा | 2.26 |
6 | दूध | वायलेट किराना | 3.45 |
7 | दूध | क्लार्क किराना | 2.10 |
8 | रोटी | वायलेट किराना | 2.55 |
9 | दूध | किराना अमांडा | 1.95 |
आइए उन उत्पादों के नाम खोजें जिनमें किराने के सामान के बीच प्रत्येक उत्पाद की औसत कीमत 3.00 से अधिक है।
समाधान:
SELECT name, AVG(price) FROM product GROUP BY name HAVING AVG(price)>3.00;
ये रहा परिणाम:
नाम | <थ>औसत|
---|---|
रोटी | 3.13 |
चर्चा:
एग्रीगेट फ़ंक्शन का उपयोग करके रिकॉर्ड को फ़िल्टर करने के लिए, HAVING क्लॉज़ का उपयोग करें।
यहां हम कुल मूल्य की गणना करते हैं:प्रत्येक उत्पाद की औसत कीमत। एक को एक से अधिक पंसारी द्वारा बेचा जाता है; इसलिए प्रत्येक के लिए औसत मूल्य की गणना की जाती है (हमारे उदाहरण में, SELECT name, AVG(price)
) कुल फ़ंक्शन के अलावा, हम SELECT में कॉलम नाम का भी उपयोग करते हैं, इसलिए हमें इस कॉलम नाम के साथ GROUP BY का उपयोग करना चाहिए (GROUP BY name
)
अंतिम चरण HAVING क्लॉज में कुल फ़ंक्शन का उपयोग कर रहा है। याद रखें कि HAVING को GROUP BY क्लॉज के बाद रखा जाना चाहिए। इसमें वह स्थिति होती है जो किसी दिए गए मान के साथ कुल फ़ंक्शन द्वारा लौटाए गए मान की तुलना करती है। ऊपर, यह 3.00 मान वाले उत्पाद का औसत मूल्य है (HAVING AVG(price)>3.00
) इस प्रश्न में, हम जांचते हैं कि सभी किराने के सामान में प्रत्येक उत्पाद की औसत कीमत तीन से अधिक है या नहीं। क्वेरी ने केवल एक उत्पाद, ब्रेड प्रदर्शित किया, जिसकी औसत कीमत तीन से अधिक थी।