मॉड्यूल पाठ (4/4)
फ़िल्टरिंग समूह: होना
एक बार जब आपके पास प्रति समूह (पिछला पाठ) परिणाम हो, तो आप अक्सर ऐसा करना चाहेंगे
केवल वही समूह रखें जो शर्त पूरी करते हों: अधिक वाले विभाग
2 से अधिक लोग, 100k से अधिक औसत बजट वाली परियोजनाएं, उपयोगकर्ता
कम से कम 10 ऑर्डर. ऐसा करने के लिए WHERE पर्याप्त नहीं है।
WHERE पर्याप्त क्यों नहीं है?
WHERE एकत्रीकरण से पहले तालिका पंक्तियों को फ़िल्टर करता है। तो यह नहीं देख सकता
COUNT(*) या AVG(...) का परिणाम: WHERE चलने के समय, वे
मूल्यों की गणना अभी तक नहीं की गई है.
-- ERROR: COUNT(*) doesn't exist yet when WHERE is evaluated
SELECT department_id, COUNT(*) AS count
FROM employees
WHERE COUNT(*) > 2 -- ❌ doesn't work
GROUP BY department_id;एकत्रीकरण के बाद को फ़िल्टर करने के लिए एक समर्पित खंड है: HAVING।
वाक्यविन्यास
SELECT grouping_column, AGGREGATE_FUNCTION(...)
FROM table
GROUP BY grouping_column
HAVING condition_on_aggregate;-- Departments with more than 2 employees:
SELECT department_id, COUNT(*) AS count
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 2;HAVING GROUP BY के लिए वही है जो WHERE FROM के लिए है: वही विचार
("फ़िल्टर"), लेकिन समुच्चय पर समूहीकरण के बाद लागू किया गया।
उपवाक्यों का तार्किक क्रम
WHERE और HAVING को दोबारा भ्रमित न करने के लिए, उस क्रम को याद रखें जिसमें
SQL उन्हें मानसिक रूप से निष्पादित करता है:
FROM/JOIN- स्रोतों को जोड़कर प्रारंभिक तालिका बनाता है।WHERE— उन पंक्तियों को हटा देता है जिनकी आपको परवाह नहीं है।GROUP BY- शेष पंक्तियों को समूहों में एकत्रित करता है।HAVING— उन समूहों को हटा देता है जिनकी आपको परवाह नहीं है।SELECT- अंतिम कॉलम (समुच्चय सहित) की गणना करता है।ORDER BY/LIMIT— पुन: व्यवस्थित करें और काटें।
महत्वपूर्ण नोट्स:
WHEREमें आप केवल टेबल कॉलम का उपयोग कर सकते हैं;HAVINGमें आप स्तंभों और समुच्चय को समूहीकृत करना का उपयोग कर सकते हैं।
-- Classic combo: filter first, group, filter the groups, sort.
SELECT d.name, AVG(e.salary) AS average
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id
WHERE e.hired_on >= '2018-01-01' -- filter rows
GROUP BY d.name
HAVING AVG(e.salary) > 35000 -- filter groups
ORDER BY average DESC;इसे अजमाएं
प्रत्येक विभाग के लिए, नाम (विभागों का नाम) और कर्मचारियों की संख्या दिखाएं, लेकिन केवल कम से कम 2 कर्मचारियों वाले विभागों के लिए। प्रत्येक योग्यता विभाग में दो कॉलम, एक पंक्ति।
संकेत दिखाएँ
HAVING में 'कम से कम 2' स्थिति COUNT(*) >= 2 हो जाती है।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
उन विभागों (विभागों का नाम) को दिखाएं जिनका औसत वेतन 35000 से अधिक है। केवल 2018 के बाद से नियुक्त कर्मचारियों पर विचार करें। दो कॉलम: नाम और औसत. औसत अवरोहण के अनुसार क्रमबद्ध करें।
संकेत दिखाएँ
WHERE पंक्तियों को फ़िल्टर करता है (2018 से नियुक्त कर्मचारी), HAVING समूहों को फ़िल्टर करता है (औसत > 35000)।
3 प्रयासों के बाद समाधान उपलब्ध है