OVER, PARTITION BY और ORDER BY
विंडो विनिर्देशन की रचना और PARTITION द्वारा गणना को पुनः आरंभ करने का तरीका समझें
OVER, PARTITION BY और ORDER BY, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
साक्षात्कारकर्ता विंडो फ़ंक्शन क्यों चुनते हैं
विंडो फ़ंक्शन वर्तमान पंक्ति से संबंधित पंक्तियों के समूह पर गणना करता है, लेकिन GROUP BY की तरह उन्हें एक में नहीं समेटता। यही गुण साक्षात्कारकर्ताओं को पसंद आता है: आप प्रत्येक विवरण-पंक्ति बनाए रखते हैं और उसके साथ समेकित मान, क्रमांक या संचयी योग भी प्राप्त करते हैं।
- GROUP BY प्रत्येक समूह के लिए एक पंक्ति लौटाता है।
- विंडो फ़ंक्शन प्रत्येक इनपुट पंक्ति लौटाता है और साथ में एक अतिरिक्त गणना किया हुआ स्तंभ देता है।
जब साक्षात्कारकर्ता कहते हैं "हर कर्मचारी और उसी पंक्ति में उसके विभाग का औसत वेतन दिखाइए," तो वे जाँच रहे होते हैं कि आप स्वयं-जोड़ के बजाय विंडो फ़ंक्शन चुनते हैं या नहीं।
OVER क्लॉज़ की संरचना
हर विंडो फ़ंक्शन के बाद OVER (...) क्लॉज़ आता है। इस क्लॉज़ के तीन वैकल्पिक भाग होते हैं, और उन्हें सटीक नाम से बताना साक्षात्कारकर्ताओं पर अच्छा प्रभाव डालता है:
- PARTITION BY — पंक्तियों को समूहों में बाँटता है; फ़ंक्शन हर समूह में फिर से शुरू होता है।
- ORDER BY — प्रत्येक समूह के भीतर पंक्तियों का क्रम तय करता है (क्रमांकन और संचयी योग के लिए आवश्यक)।
- सीमा-फ़्रेम — यह सीमित करता है कि गणना में कौन-सी पंक्तियाँ शामिल हों (ROWS/RANGE)।
खाली OVER () पूरे परिणाम-समुच्चय को एक ही समूह मानता है।
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees;विंडो बनाम समेकित फ़ंक्शन: एक ही फ़ंक्शन, अलग परिणाम
विंडो फ़ंक्शन के रूप में उपयोग करने पर वही समेकित फ़ंक्शन अलग तरह से व्यवहार करता है। नीचे दी गई दोनों क्वेरियों की अवधारणा की तुलना कीजिए।
AVG(salary)के साथGROUP BY departmentप्रत्येक विभाग के लिए एक पंक्ति लौटाता है।AVG(salary) OVER (PARTITION BY department)प्रत्येक कर्मचारी को लौटाता है और हर कर्मचारी के साथ विभाग का औसत भी दिखाता है।
साक्षात्कार की सलाह: स्पष्ट रूप से बताइए कि विंडो वाला रूप GROUP BY की आवश्यकता नहीं रखता और दोहराई गई विवरण-पंक्तियों को हटाता नहीं है।
-- Aggregate: collapses
SELECT department, AVG(salary)
FROM employees
GROUP BY department;
-- Window: preserves every row
SELECT department, name, AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees;PARTITION BY: गणना को फिर से शुरू करना
PARTITION BY विंडो फलनों के लिए वही भूमिका निभाता है जो समुच्चय फलनों के लिए GROUP BY निभाता है, लेकिन यह पंक्तियों को समेटकर एक नहीं करता। प्रत्येक अलग-अलग विभाजन मान के लिए अपनी स्वतंत्र गणना होती है।
उदाहरण में, पंक्ति क्रमांक हर विभाग के लिए 1 से फिर शुरू होता है। PARTITION BY के बिना, क्रमांकन सभी कर्मचारियों के बीच लगातार चलता रहता।
- आप एक स्तंभ या कई स्तंभों के आधार पर विभाजन कर सकते हैं।
PARTITION BYन होने पर एक ही विशाल विभाजन (पूरा समुच्चय) बनता है।
SELECT
department,
name,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
FROM employees;OVER के अंदर ORDER BY
OVER के अंदर का ORDER BY प्रश्न के अंतिम ORDER BY के समान नहीं होता। यह केवल प्रत्येक विभाजन के भीतर पंक्तियों का क्रम निर्धारित करता है, जिस पर फलन काम करता है।
- क्रम-निर्धारण फलनों (
ROW_NUMBER,RANK) के लिए यह आवश्यक है — उन्हें क्रम निर्धारित करने के लिए एक क्रम चाहिए। - किसी विभाजन पर साधारण समुच्चय फलनों के लिए इसकी आवश्यकता नहीं होती, जब तक आप चलती हुई गणना न चाहते हों।
साक्षात्कार में होने वाली एक आम चूक विंडो के ORDER BY को निर्गम के प्रस्तुति-क्रम के साथ भ्रमित करना है।
SELECT
name,
hire_date,
ROW_NUMBER() OVER (ORDER BY hire_date) AS seniority_rank
FROM employees
ORDER BY name; -- output order is independent of the window orderPARTITION BY और ORDER BY का संयोजन
पारंपरिक क्रम-निर्धारण विंडो दोनों को मिलाती है: PARTITION BY समूह बनाता है, फिर ORDER BY प्रत्येक समूह के भीतर क्रम तय करता है।
नीचे दिए गए विनिर्देश को ऐसे पढ़िए: "हर विभाग के भीतर कर्मचारियों को वेतन के घटते क्रम में लगाइए और उन्हें क्रमांक दीजिए।" हर विभाग में सबसे अधिक वेतन पाने वाले व्यक्ति को पंक्ति क्रमांक 1 मिलता है।
यह एकल विनिर्देश सबसे आम विंडो-फलन वाले साक्षात्कार प्रश्नों की आधारशिला है, जिनमें हर समूह के शीर्ष N सदस्य निकालना भी शामिल है।
SELECT
department,
name,
salary,
ROW_NUMBER() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS dept_salary_rank
FROM employees;ORDER BY समुच्चय फलन का व्यवहार बदलता है
यह एक सूक्ष्म बिंदु है जिस पर साक्षात्कारकर्ता सवाल पूछते हैं: किसी समुच्चय विंडो में ORDER BY जोड़ने पर वह चलती हुई गणना बन जाती है, क्योंकि एक अंतर्निहित फ़्रेम ("विभाजन की शुरुआत से वर्तमान पंक्ति तक") सक्रिय हो जाता है।
SUM(x) OVER (PARTITION BY g)→ हर पंक्ति पर उसी समूह का कुल योग।SUM(x) OVER (PARTITION BY g ORDER BY d)→ वर्तमान पंक्ति तक का चलता हुआ कुल योग।
यह जानना कि ORDER BY स्वतः एक फ़्रेम जोड़ता है, मध्यम स्तर के उम्मीदवारों को कनिष्ठ उम्मीदवारों से अलग करता है।
SELECT
account_id,
txn_date,
amount,
SUM(amount) OVER (
PARTITION BY account_id
ORDER BY txn_date
) AS running_balance
FROM transactions;विंडो फलनों का प्रयोग कहाँ अनुमत है
विंडो फलन केवल SELECT सूची और ORDER BY खंड में आ सकते हैं। वे WHERE, GROUP BY या HAVING में अनुमत नहीं हैं।
इसका कारण तार्किक निष्पादन क्रम से जुड़ा है: विंडो फलनों का मूल्यांकन WHERE, GROUP BY और HAVING के चलने के बाद होता है। विंडो के उन्हें देखने से पहले ही पंक्तियाँ चुनी जा चुकी होती हैं।
इसीलिए किसी क्रम-स्थान के आधार पर छाँटने के लिए उपप्रश्न या CTE की आवश्यकता होती है — इस बिंदु को बाद के पाठ में पूरी तरह समझाया गया है।
-- This FAILS: window function in WHERE
-- SELECT name FROM employees
-- WHERE ROW_NUMBER() OVER (ORDER BY salary) = 1;
-- This works: window in SELECT, filter outside
SELECT * FROM (
SELECT name, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn
FROM employees
) t
WHERE rn = 1;एक ही प्रश्न में अनेक विंडो फलन
आप एक ही SELECT में कई विंडो फलनों का प्रयोग कर सकते हैं, और प्रत्येक का अपना या साझा विनिर्देश हो सकता है। डेटाबेस विभाजित आँकड़ों पर एक ही चरण में उनकी गणना करता है।
साक्षात्कार में यह तब उपयोगी होता है जब आपको एक साथ क्रम-स्थान और विभागीय औसत चाहिए। यदि दो फलन एक ही विनिर्देश साझा करते हैं, तो कुछ भाषारूप आपको उसे WINDOW खंड के साथ नाम देने देते हैं, जिससे दोहराव से बचा जा सके।
SELECT
name,
department,
salary,
ROW_NUMBER() OVER w AS rn,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees
WINDOW w AS (PARTITION BY department ORDER BY salary DESC);व्यावहारिक उदाहरण: वेतन बनाम विभागीय औसत
विश्लेषक का एक आम प्रश्न है: "हर कर्मचारी का वेतन, विभागीय औसत और अंतर दिखाइए।" एक विंडो व्यंजक मुख्य काम कर देता है; बाकी काम अंकगणित से हो जाता है।
ध्यान दीजिए कि यहाँ GROUP BY नहीं है और हर कर्मचारी की पंक्ति बनी रहती है। dept_avg उसी विभाग के सभी कर्मचारियों के लिए दोहराया जाता है, और इसी वजह से पंक्ति-दर-पंक्ति तुलना संभव होती है।
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg,
salary - AVG(salary) OVER (PARTITION BY department) AS diff_from_avg
FROM employees
ORDER BY department, salary DESC;साक्षात्कारकर्ता जिन सामान्य गलतियों पर ध्यान देते हैं
विंडो फलनों की बात आने पर इन जालों से बचिए:
WHEREयाHAVINGमें विंडो फलन रखना — अमान्य; उपप्रश्न का प्रयोग कीजिए।- क्रम-निर्धारण फलन में
ORDER BYभूल जाना — परिणाम मनमाने हो जाते हैं। - यह मान लेना कि
PARTITION BYपंक्तियों की संख्या घटाता है — ऐसा कभी नहीं होता। - विंडो के
ORDER BYको अंतिम निर्गम क्रम के साथ भ्रमित करना। - समुच्चय विंडो में
ORDER BYजोड़ना और यह न समझना कि वह चलती हुई कुल गणना बन गई है।
त्वरित जाँच
विंडो विनिर्देश की अपनी समझ जाँचिए।
पुनरावलोकन: विंडो विनिर्देश
अब आपको OVER (...) की संरचना अच्छी तरह समझ में आ गई है:
- विंडो फलन संबंधित पंक्तियों पर गणना करते हुए हर पंक्ति को बनाए रखते हैं।
- PARTITION BY समूह बनाता है और गणना को फिर से शुरू करता है; यह कभी पंक्तियाँ नहीं हटाता।
- ORDER BY किसी विभाजन के भीतर पंक्तियों का क्रम तय करता है; क्रम-निर्धारण फलनों के लिए यह आवश्यक है और यह समुच्चय फलनों को चलती हुई गणना में बदल देता है।
- विंडो फलन केवल
SELECTऔरORDER BYमें मान्य हैं —WHERE/HAVINGमें कभी नहीं।
अगले पाठ में आप ROW_NUMBER के साथ नियतात्मक क्रमांक देना सीखेंगे।
एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 90
- पाठ
- 360
अक्सर पूछे जाने वाले प्रश्न
क्या “OVER, PARTITION BY और ORDER BY” पाठ निःशुल्क है?
हाँ—“OVER, PARTITION BY और ORDER BY” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“OVER, PARTITION BY और ORDER BY” में मैं क्या सीखूँगा?
विंडो विनिर्देशन की रचना और PARTITION द्वारा गणना को पुनः आरंभ करने का तरीका समझें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“OVER, PARTITION BY और ORDER BY” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- OVER, PARTITION BY और ORDER BY
- विशिष्ट क्रम के लिए ROW_NUMBER
- टाई में RANK बनाम DENSE_RANK
- विंडो परिणाम पर फ़िल्टर लगाना