GROUP BY के बिना प्रति-समूह समेकन
विवरण ROW के साथ समूह का अधिकतम मान निकालने के लिए संबंधित सबक्वेरी का उपयोग करें
GROUP BY के बिना प्रति-समूह समेकन, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
विवरण और समुच्चय की समस्या
साक्षात्कार में अक्सर पूछा जाने वाला प्रश्न है: "हर पंक्ति को उसके समूह के समुच्चय मान के साथ दिखाइए।" उदाहरण के लिए, हर कर्मचारी को उसी पंक्ति में उसके विभाग के अधिकतम वेतन के साथ सूचीबद्ध कीजिए।
सादा GROUP BY पंक्तियों को समेट देता है, इसलिए वह प्रति-कर्मचारी विवरण बनाए नहीं रख सकता। आपको विवरण वाली पंक्तियाँ और समूह-स्तर की संख्या एक साथ चाहिए।
सहसंबद्ध सबक्वेरी इस समस्या को सुंदर ढंग से हल करती है: वह कुछ भी समेटे बिना हर विवरण वाली पंक्ति के लिए समूह का समुच्चय मान निकालती है।
सादा GROUP BY यहाँ क्यों विफल होता है
यदि आप SELECT dept_id, MAX(salary) FROM employees GROUP BY dept_id लिखते हैं, तो आपको हर विभाग के लिए एक पंक्ति मिलती है और व्यक्तिगत नाम खो जाते हैं।
SELECT में name जोड़ने पर, उसे GROUP BY में जोड़े बिना, सामान्य "स्तंभ GROUP BY में होना चाहिए" त्रुटि आती है।
साक्षात्कारकर्ता यह जाँच रहा है कि आप समझते हैं या नहीं कि GROUP BY पंक्तियों की संख्या घटाता है। विवरण वाली पंक्तियाँ बनाए रखने के लिए आपको समुच्चय की गणना किसी अन्य तरीके से करनी होगी।
सहसंबद्ध सबक्वेरी समाधान के रूप में
समूह का समुच्चय मान SELECT सूची में सहसंबद्ध सबक्वेरी के रूप में रखिए। हर कर्मचारी पंक्ति उस कर्मचारी के विभाग तक सीमित आंतरिक MAX को सक्रिय करती है।
सहसंबंध e2.dept_id = e1.dept_id समुच्चय को सही समूह से जोड़ता है, जबकि बाहरी क्वेरी अब भी हर कर्मचारी के लिए एक पंक्ति लौटाती है।
SELECT e1.name,
e1.dept_id,
e1.salary,
(SELECT MAX(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id) AS dept_max_salary
FROM employees e1;हर पंक्ति की उसके समूह से तुलना
जब समूह का समुच्चय मान क्वेरी में आ जाए, तो आप हर पंक्ति की उससे तुलना कर सकते हैं। एक सामान्य प्रश्न है: "अपने विभाग के औसत से अधिक कमाने वाले कर्मचारियों को ढूँढ़िए।"
यहाँ सहसंबद्ध AVG WHERE में है, इसलिए हर कर्मचारी की जाँच उसके अपने विभाग के औसत के विरुद्ध होती है।
SELECT e1.name, e1.dept_id, e1.salary
FROM employees e1
WHERE e1.salary > (
SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id
);समूह से अंतर निकालना
आप यह भी दिखा सकते हैं कि हर पंक्ति अपने समूह के समुच्चय मान से कितनी दूर है। सहसंबद्ध औसत घटाने पर प्रति-पंक्ति अंतर मिलता है।
ध्यान दीजिए कि उसी सहसंबद्ध सबक्वेरी का कई SELECT अभिव्यक्तियों में फिर से उपयोग किया जा सकता है; इंजन उसे जहाँ-जहाँ रखा गया है, हर बार प्रति पंक्ति निष्पादित करता है।
SELECT e1.name,
e1.salary,
e1.salary - (SELECT AVG(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id) AS gap_from_dept_avg
FROM employees e1;हर समूह में सबसे अधिक कमाने वाले को ढूँढ़ना
हर विभाग में केवल सबसे अधिक वेतन पाने वाले व्यक्ति को लौटाने के लिए, हर वेतन की तुलना सहसंबद्ध MAX से कीजिए और मेल खाने वाली पंक्तियाँ रखिए।
यह तरीका बराबरी वाले परिणाम भी लौटाता है: यदि दो कर्मचारियों का विभाग में अधिकतम वेतन समान हो, तो दोनों दिखाई देंगे। बराबरी के परिणामों का यह व्यवहार अक्सर साक्षात्कारकर्ता का अगला प्रश्न होता है।
SELECT e1.name, e1.dept_id, e1.salary
FROM employees e1
WHERE e1.salary = (
SELECT MAX(e2.salary)
FROM employees e2
WHERE e2.dept_id = e1.dept_id
);विंडो फ़ंक्शन का विकल्प
आधुनिक SQL एक अधिक साफ़ साधन देता है: विंडो फ़ंक्शन। MAX(salary) OVER (PARTITION BY dept_id) पंक्तियों को समेटे बिना और सहसंबद्ध पुनः-स्कैन के बिना समूह का समुच्चय मान निकालता है।
साक्षात्कारकर्ता तब बहुत प्रभावित होते हैं जब आप दोनों समाधान दे सकें और समझा सकें कि विंडो वाला संस्करण आम तौर पर बेहतर प्रदर्शन करता है, क्योंकि वह तालिका को केवल एक बार स्कैन करता है।
SELECT name,
dept_id,
salary,
MAX(salary) OVER (PARTITION BY dept_id) AS dept_max_salary
FROM employees;सहसंबद्ध और विंडो विधियों के बीच समझौते
दोनों तरीके समान संरचना लौटाते हैं, लेकिन उनमें अंतर हैं:
- सहसंबद्ध सबक्वेरी: अनेक प्रणालियों में चलने योग्य और बहुत पुराने इंजनों पर भी काम करती है, लेकिन हर पंक्ति के लिए फिर से गणना करती है।
- विंडो फ़ंक्शन: एक ही चरण में काम करता है, बड़ी तालिकाओं पर बहुत तेज़ होता है, लेकिन इसके लिए SQL में विंडो समर्थन आवश्यक है।
बताइए कि आप इनमें से किसे और क्यों चुनेंगे। छोटी तालिका पर कभी-कभार किए जाने वाले काम के लिए दोनों ठीक हैं; बड़े पैमाने के विश्लेषण के लिए विंडो फ़ंक्शन को प्राथमिकता दीजिए।
हल किया हुआ उदाहरण: ग्राहक के औसत से अधिक वाले ऑर्डर
इस तरीके को ऑर्डर पर लागू कीजिए। ऐसे ऑर्डर दिखाइए जिनकी राशि ऑर्डर करने वाले ग्राहक की अपनी औसत ऑर्डर राशि से अधिक है।
सहसंबद्ध AVG o2.customer_id = o1.customer_id से सीमित है, जिससे हर ऑर्डर को उसके ग्राहक का व्यक्तिगत आधार-मान मिलता है।
SELECT o1.order_id, o1.customer_id, o1.amount
FROM orders o1
WHERE o1.amount > (
SELECT AVG(o2.amount)
FROM orders o2
WHERE o2.customer_id = o1.customer_id
);NULL और खाली समूह वाली स्थितियों पर ध्यान दीजिए
यदि किसी समूह में केवल एक पंक्ति हो, तो उसका औसत उसी पंक्ति के बराबर होता है, इसलिए salary > avg गलत होता है और वह पंक्ति बाहर हो जाती है। इस किनारी स्थिति का पहले से उल्लेख कीजिए।
इसके अलावा, AVG और MAX NULL वेतनों को नज़रअंदाज़ करते हैं, जैसा कि SQL के समुच्चय नियमों में होता है। यदि किसी समूह का हर मान NULL हो, तो समुच्चय मान NULL होता है और तुलनाएँ UNKNOWN बन जाती हैं, जिससे पंक्ति बाहर हो जाती है। इन स्थितियों का अनुमान लगाना ही आपके उत्तर को पूरी तरह से समझा हुआ बनाता है।
समूह के भीतर क्रम गिनना
आप सहसंबद्ध COUNT से किसी पंक्ति का उसके समूह के भीतर क्रम व्यक्त कर सकते हैं। हर कर्मचारी के वेतन का उसके विभाग के भीतर क्रम जानने के लिए गिनिए कि कितने सहकर्मी उससे अधिक कमाते हैं।
क्रम 1 का अर्थ है सबसे अधिक कमाने वाला। 1 जोड़ने पर अधिक कमाने वालों की संख्या एक से शुरू होने वाली स्थिति में बदल जाती है, और सहसंबंध इसे विभाग तक सीमित रखता है।
SELECT e1.name,
e1.dept_id,
e1.salary,
(SELECT COUNT(*) + 1
FROM employees e2
WHERE e2.dept_id = e1.dept_id
AND e2.salary > e1.salary) AS salary_rank_in_dept
FROM employees e1;त्वरित जाँच
इस कार्य के लिए सादे GROUP BY की तुलना में सहसंबद्ध सबक्वेरी बेहतर क्यों है, इसका कारण चुनिए।
पुनरावलोकन: GROUP BY के बिना प्रति-समूह समुच्चय
मुख्य बातें:
- सहसंबद्ध सबक्वेरी हर विवरण वाली पंक्ति पर समूह-स्तर का समुच्चय मान रखती है, बिना पंक्तियों को समेटे।
- समुच्चय मान दिखाने के लिए इसका उपयोग SELECT में कीजिए, या हर पंक्ति की उसके समूह से तुलना करने के लिए WHERE में।
= MAX(...)वाला तरीका अधिकतम मान वाली सभी बराबरी की पंक्तियाँ लौटाता है।PARTITION BYवाला विंडो फ़ंक्शन यही काम एक ही चरण में करता है और आम तौर पर बड़े पैमाने पर बेहतर चलता है।
दोनों समाधान प्रस्तुत कीजिए और साक्षात्कार में अपनी पसंद का कारण बताइए।
एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 90
- पाठ
- 360
अक्सर पूछे जाने वाले प्रश्न
क्या “GROUP BY के बिना प्रति-समूह समेकन” पाठ निःशुल्क है?
हाँ—“GROUP BY के बिना प्रति-समूह समेकन” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“GROUP BY के बिना प्रति-समूह समेकन” में मैं क्या सीखूँगा?
विवरण ROW के साथ समूह का अधिकतम मान निकालने के लिए संबंधित सबक्वेरी का उपयोग करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“GROUP BY के बिना प्रति-समूह समेकन” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- संबंधित सबक्वेरी की रचना
- GROUP BY के बिना प्रति-समूह समेकन
- संबंधित EXISTS और NOT EXISTS
- संबंधित सबक्वेरी को JOIN में फिर से लिखना