फ़्रेमिंग में ROWS बनाम RANGE
ROW-आधारित और मान-आधारित फ़्रेम के सूक्ष्म और अक्सर परीक्षण किए जाने वाले अंतर को समझें
फ़्रेमिंग में ROWS बनाम RANGE, CoddyKit पर SQL साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह SQL साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
वह अंतर जिसकी साक्षात्कारकर्ता जाँच करते हैं
जब आप संचयी योग लिखना सीख जाते हैं, तो स्वाभाविक अगला सवाल होता है: "विंडो फ़्रेम में ROWS और RANGE के बीच क्या अंतर है?" यह मध्यम-स्तरीय कौशल का सटीक संकेत है। कई उम्मीदवार फ़्रेम का रोज़ उपयोग करते हैं, लेकिन कभी ध्यान नहीं देते कि ये दोनों मुख्यशब्द अलग-अलग तरह से काम करते हैं।
दोनों एग्रीगेट को दिखाई देने वाली पंक्तियों का समूह परिभाषित करते हैं, लेकिन उस समूह को गिनने का उनका तरीका मूल रूप से अलग होता है। इसे सही समझिए और आप दूसरों से अलग नज़र आएँगे।
ROWS भौतिक पंक्तियाँ गिनता है
ROWS स्थितिगत होता है। ROWS BETWEEN 2 PRECEDING AND CURRENT ROW का शाब्दिक अर्थ है वर्तमान पंक्ति और क्रमबद्ध अनुक्रम में उसके ठीक ऊपर की दो भौतिक पंक्तियाँ।
यह परवाह नहीं करता कि पड़ोसी पंक्तियों में समान ORDER BY मान है या नहीं। तीन पंक्तियाँ यानी तीन पंक्तियाँ, बस। चलती औसत और सख्त संचयी योग के लिए लगभग हमेशा यही फ़्रेमिंग चाहिए होती है।
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) AS rows_sum
FROM sales;RANGE मान के आधार पर गिनता है
RANGE मान-आधारित होता है। इसमें वे सभी पंक्तियाँ शामिल होती हैं जिनका ORDER BY मान वर्तमान पंक्ति के मान की तार्किक सीमा के भीतर आता है; यह पंक्तियों की गिनती पर आधारित नहीं होता।
सबसे महत्वपूर्ण परिणाम यह है कि RANGE में ORDER BY मान पर समान सभी पंक्तियों को समान मान वाली पंक्तियों के एक समूह के रूप में माना जाता है। उन सभी को एक ही फ़्रेम मिलता है और इसलिए परिणाम भी एक ही मिलता है।
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS range_sum
FROM sales;वह बराबरी वाला उदाहरण जो अंतर स्पष्ट करता है
मान लीजिए कि 2024-03-02 को दो बिक्री हुईं, जिनकी राशियाँ 30 और 40 थीं, और उससे पहले 2024-03-01 को 100 की राशि वाली बिक्री हुई थी।
- RANGE के साथ CURRENT ROW तक: दोनों 03-02 वाली पंक्तियाँ समान मान वाली पंक्तियाँ हैं, इसलिए दोनों में 100 + 30 + 40 = 170 दिखेगा।
- ROWS के साथ CURRENT ROW तक: पहली 03-02 वाली पंक्ति में 130 और दूसरी में 170 दिखेगा, क्योंकि हर पंक्ति फ़्रेम को एक-एक स्थान आगे बढ़ाती है।
डेटा एक ही है, संख्याएँ अलग हैं। समान मानों की स्थिति में यह अंतर ही इस सवाल का सार है।
डिफ़ॉल्ट RANGE क्यों है
याद रखिए कि बिना किसी स्पष्ट फ़्रेम के OVER (ORDER BY ...) डिफ़ॉल्ट रूप से RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW का उपयोग करता है।
इसका अर्थ है कि साधारण संचयी योग चुपचाप RANGE का उपयोग करता है। अद्वितीय क्रमबद्ध कुंजियों पर यह ROWS के समान होता है, इसलिए त्रुटि छिपी रहती है। जैसे ही क्रमबद्ध मान दोहराए जाते हैं, आपका संचयी योग चुपचाप समान मान वाली पंक्तियों को एक साथ जोड़ देता है। इसी कारण अनुभवी इंजीनियर ROWS को स्पष्ट रूप से लिखते हैं।
संख्यात्मक ऑफ़सेट के साथ RANGE
RANGE केवल UNBOUNDED ही नहीं, बल्कि मान का ऑफ़सेट भी ले सकता है। किसी दिनांक या संख्यात्मक स्तंभ पर RANGE BETWEEN 7 PRECEDING AND CURRENT ROW लागू करने पर यह उन सभी पंक्तियों को शामिल करता है जिनका मान वर्तमान मान से 7 इकाइयों के भीतर है।
दिनांक पर लागू करने पर यह वास्तविक "पिछले 7 दिनों" की विंडो देता है और छूटे हुए दिनों को सही ढंग से छोड़ देता है, जबकि ROWS 7 PRECEDING अंतरालों की परवाह किए बिना पिछली 7 पंक्तियाँ लेता। इस सूक्ष्म अंतर को जानना एक सशक्त उत्तर है।
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
RANGE BETWEEN INTERVAL '7 days' PRECEDING AND CURRENT ROW
) AS last_7_days
FROM sales;ROWS अंतरालों को नज़रअंदाज़ करता है
दूसरी ओर, ROWS में डेटा के अंतरालों की कोई अवधारणा नहीं होती। यदि आपकी बिक्री तालिका में सप्ताहांत के दिन नहीं हैं, तो ROWS BETWEEN 6 PRECEDING AND CURRENT ROW 7 दर्ज दिनों तक फैला होगा, जो वास्तव में दो कैलेंडर सप्ताहों को कवर कर सकता है।
इसलिए चुनाव आपके उद्देश्य पर निर्भर करता है: अंतिम N अभिलेख के लिए ROWS; मान की अंतिम N इकाइयों (दिन, डॉलर) के लिए ऑफ़सेट वाला RANGE।
डायलेक्ट समर्थन की वास्तविकता की जाँच
एक ईमानदार साक्षात्कार-उत्तर में समर्थन की असमानताओं का उल्लेख होना चाहिए:
- PostgreSQL ऑफ़सेट वाले
RANGE(v11 से) औरROWSका पूर्ण समर्थन करता है। - एसक्यूएल सर्वर
ROWSऔरRANGEका समर्थन करता है, लेकिनRANGEमें केवलUNBOUNDED/CURRENT ROWका उपयोग कर सकते हैं, संख्यात्मक ऑफ़सेट का नहीं। - MySQL 8 दोनों का समर्थन करता है, लेकिन
RANGEऑफ़सेट के प्रकार सीमित हैं।
यदि संख्यात्मक RANGE ऑफ़सेट उपलब्ध न हो, तो आप स्व-संयोजन या बनाई गई कैलेंडर-श्रृंखला से उसका अनुकरण कर सकते हैं। इसका उल्लेख करना वास्तविक प्रणालियों की आपकी समझ दिखाता है।
GROUPS: तीसरा तरीका
फ़्रेम बनाने का एक कम ज्ञात तीसरा तरीका भी है: GROUPS। यह पंक्तियों या मानों के बजाय समकक्ष समूहों को गिनता है। GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW में वर्तमान समकक्ष समूह और उससे ठीक पहले वाला समूह शामिल होता है।
इसकी आवश्यकता बहुत कम पड़ती है, लेकिन जब पूछा जाए, "क्या फ़्रेम बनाने के और भी तरीके हैं?", तब इसका नाम लेना आपकी वास्तविक गहराई दर्शाता है। इसका समर्थन PostgreSQL 11+ और कुछ अन्य प्रणालियों में उपलब्ध है।
SELECT
sale_date,
amount,
SUM(amount) OVER (
ORDER BY sale_date
GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
) AS two_day_groups
FROM sales;एक निर्णय-नियम जिसे आप दोहरा सकते हैं
पूरे विषय को एक ऐसे वाक्य में समेटें जिसे आप साक्षात्कार में कह सकें:
"जब मेरा आशय भौतिक पंक्तियों की निश्चित संख्या से हो, तब ROWS का उपयोग करें; जब मेरा आशय क्रमबद्ध मान के तार्किक दायरे से हो, तब RANGE का उपयोग करें; और याद रखें कि समान मान होने पर दोनों अलग परिणाम देते हैं, क्योंकि डिफ़ॉल्ट RANGE समान मानों को एक साथ समूहित करता है।"
यह एक वाक्य प्रश्न का पूरा और आत्मविश्वासपूर्ण उत्तर देता है।
साथ-साथ तुलना
दोनों फ़्रेमिंग को एक ही क्वेरी में रखने से उनका अंतर स्पष्ट दिखाई देता है। इसे ऐसी सामग्री पर चलाइए जिसमें दिनांक दोहराए गए हों और दोनों स्तंभों की पंक्ति-दर-पंक्ति तुलना कीजिए।
अद्वितीय दिनांकों पर दोनों स्तंभ बिल्कुल समान होते हैं; समान दिनांकों पर RANGE वाला स्तंभ समकक्ष पंक्तियों में वही कुल दोहराता है, जबकि ROWS वाला स्तंभ हर बार एक चरण बढ़ता है।
SELECT
sale_date,
amount,
SUM(amount) OVER (ORDER BY sale_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS rows_total,
SUM(amount) OVER (ORDER BY sale_date
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS range_total
FROM sales;त्वरित जाँच
डिफ़ॉल्ट फ़्रेम के साथ ORDER BY मान पर दो पंक्तियों का मान समान है। क्या होता है?
पुनरावलोकन: ROWS बनाम RANGE
ROWS भौतिक पंक्तियों को गिनता है; RANGE क्रमबद्धता वाले स्तंभ के तार्किक मान के आधार पर गिनता है और समान मानों को समकक्ष पंक्तियों के रूप में समूहित करता है। डिफ़ॉल्ट OVER (ORDER BY ...) फ़्रेम RANGE होता है, इसलिए साधारण संचयी योग दोहराए गए क्रमबद्ध मानों को एक साथ मिला सकता है।
"अंतिम N अभिलेख" और अंतरालों से अप्रभावित गतिशील विंडो के लिए ROWS चुनें; अंतरालों का ध्यान रखने वाले "अंतिम N दिनों/डॉलर" के लिए ऑफ़सेट वाला RANGE चुनें। GROUPS के अस्तित्व की जानकारी एक अतिरिक्त लाभ है। अब हम गतिशील औसत बनाने के लिए ROWS फ़्रेमिंग लागू करेंगे।
एआई शिक्षक के साथ SQL सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “फ़्रेमिंग में ROWS बनाम RANGE” पाठ निःशुल्क है?
हाँ—“फ़्रेमिंग में ROWS बनाम RANGE” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और SQL साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। SQL साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“फ़्रेमिंग में ROWS बनाम RANGE” में मैं क्या सीखूँगा?
ROW-आधारित और मान-आधारित फ़्रेम के सूक्ष्म और अक्सर परीक्षण किए जाने वाले अंतर को समझें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ SQL साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या SQL साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर SQL साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“फ़्रेमिंग में ROWS बनाम RANGE” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस SQL साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर SQL साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- विंडो फ़्रेम से संचयी योग
- फ़्रेमिंग में ROWS बनाम RANGE
- स्लाइडिंग विंडो पर चलायमान औसत
- संचयी वितरण और कुल का प्रतिशत