कोडिंग साक्षात्कार की तैयारी · पाठ

GROUP BY के बिना समेकन

जानें कि साधारण समेकन पूरी तालिका को एक ROW में कैसे बदल देता है

पाठ 4, कुल 4 में से13 चरण

GROUP BY के बिना समेकन, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

एक एग्रीगेट, एक पंक्ति

इंटरव्यू लेने वाले इस सवाल से एक मूलभूत अवधारणा की जाँच करते हैं: "जब आप GROUP BY के बिना किसी एग्रीगेट फ़ंक्शन का उपयोग करते हैं, तब क्या होता है?"

उत्तर है: पूरी तालिका सिमटकर एक ही पंक्ति बन जाती है। एग्रीगेट सभी योग्य पंक्तियों को एक बड़े, अंतर्निहित समूह के रूप में देखता है। इस "अंतर्निहित समूह" के मॉडल को समझने से आगे आने वाले कई नियम स्पष्ट हो जाते हैं, इसलिए इसे ध्यान से समझते हैं।

अंतर्निहित एकल समूह

जब आप बिना GROUP BY के कोई अकेला एग्रीगेट लिखते हैं, तो SQL ऐसे व्यवहार करता है जैसे हर पंक्ति वाला एक समूह मौजूद हो। परिणाम में हमेशा ठीक एक पंक्ति होती है, चाहे तालिका में कितनी भी पंक्तियाँ हों — तालिका खाली होने पर भी।

इसलिए SELECT COUNT(*) FROM employees एक पंक्ति लौटाता है, जिसमें पूरी तालिका का सारांश देने वाली एक संख्या होती है।

SELECT COUNT(*) AS total_employees
FROM employees;
-- always returns exactly one row

एक साथ कई एग्रीगेट

आप एक ही SELECT में कई एग्रीगेट लिख सकते हैं। वे सभी उसी अंतर्निहित समूह का सारांश देते हैं, इसलिए आपको अब भी कई स्तंभों वाली ठीक एक पंक्ति मिलती है।

यह "मुझे सारांश आँकड़े दीजिए" वाली मानक क्वेरी है। चारों संख्याएँ पंक्तियों के उसी पूरे समूह का वर्णन करती हैं।

SELECT
  COUNT(*)     AS num_rows,
  SUM(salary)  AS total_pay,
  AVG(salary)  AS avg_pay,
  MAX(salary)  AS top_pay
FROM employees;

मिश्रण की त्रुटि

यह सबसे अधिक पूछे जाने वाले नियमों में से एक है। आप GROUP BY के बिना एक ही SELECT में किसी अकेले एग्रीगेट और गैर-एग्रीगेट स्तंभ को मिला नहीं सकते।

क्यों? एग्रीगेट एक पंक्ति बनाता है, लेकिन साधारण स्तंभ के कई मान होते हैं — वह उनमें से किसे दिखाए? यह अस्पष्ट है, इसलिए मानक SQL एक त्रुटि उत्पन्न करता है।

-- ERROR: name is not aggregated and there is no GROUP BY
SELECT name, MAX(salary)
FROM employees;

यह अस्पष्ट क्यों है

इसे हमारी तालिका के उदाहरण से समझिए। MAX(salary) सभी पंक्तियों को एक मान में समेट देता है। लेकिन name का मान हर पंक्ति में अलग है। एक सारांश पंक्ति एक ही सेल में पाँच नाम नहीं रख सकती।

डेटाबेस अनुमान लगाने से इनकार करता है। GROUP BY के नियम के पीछे भी यही सिद्धांत है: चुना गया हर स्तंभ या तो एग्रीगेट होना चाहिए या समूह का हिस्सा। GROUP BY न होने पर केवल एग्रीगेट की अनुमति है।

MySQL का शिथिल अपवाद

एक डेटाबेस-रूप संबंधी अंतर का उल्लेख करना उपयोगी है: पुराने या गैर-सख्त MySQL में मिश्रित क्वेरी की अनुमति थी और वह एक मनमाना नाम लौटाती थी — ज़रूरी नहीं कि सबसे अधिक कमाने वाले व्यक्ति का नाम।

ONLY_FULL_GROUP_BY सक्षम होने पर आधुनिक MySQL इसे बाकी डेटाबेस की तरह अस्वीकार करता है; अब यह डिफ़ॉल्ट है। इसका उल्लेख अलग-अलग डेटाबेस-रूपों की समझ दिखाता है, लेकिन मिश्रित क्वेरी को हमेशा गलत मानिए।

MAX के पीछे वाली पंक्ति प्राप्त करना

तो सबसे अधिक वेतन पाने वाले कर्मचारी का नाम कैसे प्राप्त करेंगे? स्तंभों को मिलाकर नहीं। ORDER BY + LIMIT का उपयोग कीजिए या एग्रीगेट से तुलना करने वाली उपक्वेरी लिखिए।

ORDER BY/LIMIT वाला तरीका सबसे सरल है। उपक्वेरी वाला तरीका आसानी से सामान्यीकृत किया जा सकता है और अधिकतम मान पर बराबरी करने वाले सभी कर्मचारियों को लौटाता है।

-- Subquery: returns everyone earning the max
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

खाली तालिका पर एग्रीगेट

यह वह किनारी स्थिति है जिसे इंटरव्यू लेने वाले अक्सर पूछते हैं: "खाली तालिका पर अकेला एग्रीगेट क्या लौटाता है?"

  • COUNT(*) 0 लौटाता है (एक पंक्ति, मान 0)।
  • SUM, AVG, MIN, MAX NULL लौटाते हैं (एक पंक्ति, NULL मान)।

महत्वपूर्ण बात यह है कि आपको अब भी एक पंक्ति वापस मिलती है, कभी शून्य पंक्तियाँ नहीं। यही GROUP BY के बिना एग्रीगेट की एकल-पंक्ति गारंटी का मुख्य उद्देश्य है।

SELECT COUNT(*) AS c, SUM(salary) AS s, MAX(salary) AS m
FROM employees
WHERE 1 = 0;
-- one row: c=0, s=NULL, m=NULL

WHERE में एग्रीगेट नहीं

इस मॉडल से निकलने वाला एक और नियम है: आप WHERE क्लॉज़ में एग्रीगेट नहीं रख सकते, क्योंकि WHERE एग्रीगेशन होने से पहले अलग-अलग पंक्तियों को फ़िल्टर करता है।

एग्रीगेट के परिणाम पर फ़िल्टर लगाने के लिए आप HAVING का उपयोग करते हैं (समूह बनाने के साथ) या एग्रीगेट को उपक्वेरी में लपेटते हैं। निष्पादन क्रम में WHERE इतनी जल्दी चलता है कि वह एग्रीगेट को देख ही नहीं सकता।

-- ERROR: aggregate not allowed in WHERE
-- SELECT * FROM employees WHERE salary > AVG(salary);

-- Correct: compare to the aggregate via subquery
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

अकेला एग्रीगेट बनाम GROUP BY

इस अंतर को अपने शब्दों में रखिए:

  • GROUP BY के बिना: एक अंतर्निहित समूह = पूरी तालिका = परिणाम की ठीक एक पंक्ति।
  • GROUP BY स्तंभ के साथ: स्तंभ के प्रत्येक अलग मान के लिए एक समूह = प्रत्येक समूह के लिए एक पंक्ति।

अकेला एग्रीगेट, शून्य समूह-स्तंभों वाला GROUP BY ही है। वही प्रक्रिया, बस एक बड़ा समूह।

-- Whole table: one row
SELECT AVG(salary) FROM employees;

-- Per department: one row each
SELECT department, AVG(salary)
FROM employees
GROUP BY department;

इसे कैसे समझाएँ

एक साफ़ उत्तर होगा: "GROUP BY के बिना एग्रीगेट पूरे परिणाम-समूह को एक अंतर्निहित समूह मानता है और ठीक एक सारांश पंक्ति लौटाता है, खाली तालिका पर भी। इसके साथ गैर-एग्रीगेट स्तंभ नहीं चुना जा सकता, क्योंकि उसका मान अस्पष्ट होगा। MAX या MIN के पीछे वाली पंक्ति पाने के लिए मैं LIMIT के साथ ORDER BY या एग्रीगेट से तुलना करने वाली उपक्वेरी का उपयोग करता हूँ।"

त्वरित जाँच

परिणाम का आकार अनुमानित कीजिए।

पुनरावलोकन

GROUP BY के बिना एग्रीगेट का सार:

  • पूरी तालिका एक अंतर्निहित समूह बन जाती है → परिणाम में ठीक एक पंक्ति।
  • आप अकेले एग्रीगेट को गैर-एग्रीगेट स्तंभ के साथ नहीं मिला सकते।
  • खाली तालिका: COUNT(*) = 0, बाकी NULL लौटाते हैं, फिर भी एक पंक्ति मिलती है।
  • एग्रीगेट WHERE में नहीं आ सकते; उपक्वेरी या HAVING का उपयोग कीजिए।
  • MIN/MAX के पीछे वाली पंक्ति पाने के लिए ORDER BY + LIMIT या उपक्वेरी का उपयोग कीजिए।

एग्रीगेट फ़ंक्शन से जुड़े इंटरव्यू अभ्यास अब पूरे होते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
90
पाठ
360

अक्सर पूछे जाने वाले प्रश्न

क्या “GROUP BY के बिना समेकन” पाठ निःशुल्क है?

हाँ—“GROUP BY के बिना समेकन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“GROUP BY के बिना समेकन” में मैं क्या सीखूँगा?

जानें कि साधारण समेकन पूरी तालिका को एक ROW में कैसे बदल देता है आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“GROUP BY के बिना समेकन” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. COUNT(*) बनाम COUNT(COLUMN) बनाम COUNT(DISTINCT)
  2. NULL के साथ SUM और AVG
  3. MIN, MAX और गैर-संख्यात्मक समेकन
  4. GROUP BY के बिना समेकन
← कोडिंग साक्षात्कार की तैयारी पर वापस जाएँ