HAVING बनाम WHERE
HAVING (groups को फ़िल्टर करता है) और WHERE (rows को फ़िल्टर करता है) में अंतर कीजिए और दोनों को एक ही query में सही ढंग से लागू कीजिए।
HAVING बनाम WHERE, CoddyKit पर SQL Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फ़िल्टर करने के दो चरण
WHERE समूह बनाने से BEFORE अलग-अलग पंक्तियों को फ़िल्टर करता है। HAVING समुच्चय फ़ंक्शन लागू करने के AFTER समूहों को फ़िल्टर करता है। दोनों एक जैसे दिखते हैं, लेकिन अलग-अलग चरणों पर काम करते हैं।
WHERE का उदाहरण
WHERE मूल पंक्तियों को फ़िल्टर करता है। यह समुच्चय फ़ंक्शन के परिणाम नहीं देख सकता:
-- Sum totals for rows where status is 'paid':
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE status = 'paid'
GROUP BY user_id;HAVING का उदाहरण
HAVING समूहों को फ़िल्टर करता है। यह समुच्चय फ़ंक्शन के परिणामों का संदर्भ दे सकता है:
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 5; -- only users with ≥ 5 ordersWHERE और HAVING को साथ उपयोग करना
दोनों एक ही क्वेरी में आ सकते हैं:
SELECT user_id, SUM(total) AS revenue
FROM orders
WHERE created_at >= NOW() - INTERVAL '90 days'
GROUP BY user_id
HAVING SUM(total) > 1000;समुच्चय फ़ंक्शन WHERE में न रखें
योजनाकार समूह बनाने से पहले WHERE चलाता है — समुच्चय फ़ंक्शन अभी उपलब्ध नहीं होते:
-- WRONG:
SELECT user_id, COUNT(*) FROM orders
WHERE COUNT(*) > 5 -- ERROR
GROUP BY user_id;
-- RIGHT — move to HAVING:
SELECT user_id, COUNT(*) FROM orders
GROUP BY user_id
HAVING COUNT(*) > 5;जहाँ संभव हो, शर्तों को WHERE में पहले लागू करें
WHERE समूह बनाने से पहले फ़िल्टर करता है, इसलिए समुच्चय फ़ंक्शन तक कम पंक्तियाँ पहुँचती हैं। HAVING का उपयोग केवल उन शर्तों के लिए करें जिन्हें WHERE में व्यक्त नहीं किया जा सकता।
-- Slightly slower (filters after grouping):
SELECT user_id, COUNT(*) FROM orders
GROUP BY user_id
HAVING user_id IN (1,2,3);
-- Faster (filters before grouping):
SELECT user_id, COUNT(*) FROM orders
WHERE user_id IN (1,2,3)
GROUP BY user_id;निष्पादन का तार्किक क्रम
वैचारिक क्रम:
FROM— तालिकाएँ चुनें और जोड़ेंWHERE— पंक्तियों को फ़िल्टर करेंGROUP BY— समूह बनाएँHAVING— समूहों को फ़िल्टर करेंSELECT— स्तंभ चुनेंORDER BY— क्रम में लगाएँLIMIT— शीर्ष N परिणाम
GROUP BY के बिना HAVING
आप GROUP BY के बिना HAVING का उपयोग कर सकते हैं — पूरी तालिका एक समूह बन जाती है:
SELECT SUM(total) FROM orders
HAVING SUM(total) > 1000000; -- prints only if total over 1MHAVING में उपनाम
कुछ डेटाबेस HAVING में SELECT उपनामों का संदर्भ देने देते हैं; PostgreSQL और MySQL ऐसा करते हैं, लेकिन मानक SQL नहीं करता। सबसे अधिक पोर्टेबल तरीका है: समुच्चय फ़ंक्शन को दोहराएँ:
SELECT user_id, COUNT(*) AS order_count
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 5; -- portable
-- HAVING order_count >= 5 -- works in PG / MySQLकई समुच्चय फ़ंक्शन के साथ HAVING
समुच्चय फ़ंक्शन से जुड़ी संयुक्त शर्तों के लिए HAVING का उपयोग करें:
SELECT user_id, COUNT(*) AS orders, SUM(total) AS revenue
FROM orders
GROUP BY user_id
HAVING COUNT(*) >= 5 AND SUM(total) > 1000;प्रदर्शन संबंधी टिप्पणी
HAVING में मौजूद समुच्चय फ़ंक्शन का फ़िल्टर, स्तंभ पर लगाए गए WHERE फ़िल्टर की तरह इंडेक्स का उपयोग नहीं कर सकता। जो शर्तें संभव हों, उन्हें WHERE में ले जाएँ।
पुनरावृत्ति
WHERE = पंक्तियों को फ़िल्टर करना। HAVING = समूहों को फ़िल्टर करना।
- समुच्चय फ़ंक्शन केवल HAVING में रखें, WHERE में कभी नहीं
- गति बढ़ाने के लिए शर्तों को WHERE में पहले लागू करें
- ज़रूरत पड़ने पर दोनों का उपयोग करें
त्वरित जाँच
आप ऐसे उपयोगकर्ता चाहते हैं जिन्होंने 10 से अधिक ऑर्डर दिए हैं। उन्हें फ़िल्टर करने के लिए किस खंड का उपयोग करेंगे?
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 46
- पाठ
- 183
अक्सर पूछे जाने वाले प्रश्न
क्या “HAVING बनाम WHERE” पाठ निःशुल्क है?
हाँ—“HAVING बनाम WHERE” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“HAVING बनाम WHERE” में मैं क्या सीखूँगा?
HAVING (groups को फ़िल्टर करता है) और WHERE (rows को फ़िल्टर करता है) में अंतर कीजिए और दोनों को एक ही query में सही ढंग से लागू कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“HAVING बनाम WHERE” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- COUNT, SUM, AVG, MIN, MAX
- एकल और अनेक columns पर GROUP BY
- HAVING बनाम WHERE
- समेकित गणनाओं में रिक्त मानों से होने वाली आम गलतियाँ