HAVING वाले समूहों को फ़िल्टर करें
जब आपने GROUP BY क्लॉज के साथ समूह बनाए हैं, तो आप परिणामों को और फ़िल्टर कर सकते हैं। HAVING क्लॉज समूहों पर एक फिल्टर के रूप में कार्य करता है। यह WHERE खंड द्वारा FROM खंड लौटाई गई पंक्तियों पर फ़िल्टर के रूप में कार्य करने के तरीके के समान है.
एक HAVING क्लॉज आपको एक खोज स्थिति बनाने में सक्षम बनाता है, जो अवधारणात्मक रूप से WHERE क्लॉज के विधेय के समान है, जो तब GROUP BY क्लॉज द्वारा लौटाए गए प्रत्येक समूह का परीक्षण करता है।
निम्न उदाहरण प्रत्येक ग्राहक के लिए ऑर्डर की गणना करता है, और परिणामों को केवल उन ग्राहकों को शामिल करने के लिए फ़िल्टर करता है जिन्होंने 10 से अधिक ऑर्डर दिए हैं:
SELECT CustomerID,
COUNT(*) AS OrderCount
FROM Sales.SalesOrderHeader
GROUP BY CustomerID
HAVING COUNT(*) > 10;
WHERE से तुलना करें
जबकि HAVING और WHERE दोनों खंड डेटा फ़िल्टर करते हैं, याद रखें कि WHERE FROM खंड द्वारा लौटाई गई पंक्तियों पर काम करता है। यदि एक समूह द्वारा ... WHERE खंड का अनुसरण करते हुए आपकी क्वेरी में मौजूद है, WHERE खंड GROUP BY संसाधित होने से पहले पंक्तियों को फ़िल्टर करेगा—संभावित रूप से बनाए जा सकने वाले समूहों को सीमित करता है.
एक HAVING क्लॉज को GROUP BY के बाद संसाधित किया जाता है और केवल समूहों पर काम करता है, न कि विस्तार पंक्तियों पर। संक्षेप करने के लिए:
- किसी भी समूह के गठन से पहले एक WHERE खंड पंक्तियों को फ़िल्टर करता है
- एक HAVING क्लॉज पूरे समूहों को फ़िल्टर करता है, और आमतौर पर एक एकत्रीकरण के परिणामों को देखता है।