MySQL WHERE vs HAVING: एग्रीगेट फंक्शन के परिणाम पर फ़िल्टर
WHERE क्लॉज पंक्तियों को समूहित करने पहले फ़िल्टर करता है, इसलिए इसमें एग्रीगेट फंक्शन (SUM, COUNT, AVG, आदि) उपयोग नहीं कर सकते। एग्रीगेट परिणाम पर फ़िल्टर के लिए HAVING क्लॉज का उपयोग करें।
उदाहरण: कुल कीमत 40 से अधिक वाले नाम
टेबल बनाएं:
CREATE TABLE DemoTable (Name VARCHAR(50), Price INT);
INSERT INTO DemoTable VALUES ('Chris', 30), ('David', 40), ('Chris', 10), ('Mike', 44), ('David', 5);
डेटा:
+-------+-------+ | Name | Price | +-------+-------+ | Chris | 30 | | David | 40 | | Chris | 10 | | Mike | 44 | | David | 5 | +-------+-------+
गलत: WHERE में SUM()
SELECT Name, SUM(Price) AS Total_Price FROM DemoTable GROUP BY Name HAVING Total_Price > 40;
परिणाम:
+-------+-------------+ | Name | Total_Price | +-------+-------------+ | David | 45 | | Mike | 44 | +-------+-------------+
क्रियान्वयन क्रम
FROM— टेबल चुनेंWHERE— पंक्तियों को फ़िल्टर करें (एग्रीगेट से पहले)GROUP BY— पंक्तियों को समूहित करेंHAVING— समूहों को फ़िल्टर करें (एग्रीगेट के बाद)SELECT— कॉलम चुनेंORDER BY— सॉर्ट करेंLIMIT— सीमित करें
WHERE और HAVING दोनों उपयोग करें