Skip to content

SQL विंडो फ़ंक्शन समझाए गए

हर सामान्य SQL विंडो फ़ंक्शन और उन्हें नियंत्रित करने वाले क्लॉज़, काम के अनुसार समूहबद्ध: पंक्तियों की रैंकिंग, पड़ोसी पंक्तियों को देखना, फ़्रेम पर चलते कुल, और पहला या आख़िरी मान लेना। हर पंक्ति फ़ंक्शन को एक-पंक्ति वाले उदाहरण के साथ जोड़ती है।

विंडो फ़ंक्शन मौजूदा पंक्ति से संबंधित पंक्तियों पर परिणाम निकालता है, बिना उन्हें GROUP BY की तरह समेटे। हर विंडो फ़ंक्शन OVER क्लॉज़ में समाप्त होता है जो विंडो परिभाषित करता है: PARTITION BY पंक्तियों को समूहबद्ध करता है, ORDER BY उन्हें क्रमबद्ध करता है, और वैकल्पिक फ़्रेम सरकते सेट को सीमित करता है। OVER पर महारत हासिल करें — बाक़ी सब शब्दावली है।

संदर्भ तालिका · 27 प्रविष्टियाँ
27 of 27 rows
रैंकिंग
विंडो के भीतर हर पंक्ति के लिए एक अद्वितीय क्रमिक पूर्णांक।ROW_NUMBER() OVER (ORDER BY total DESC)
अंतराल वाली रैंक; बराबर वाली पंक्तियाँ एक रैंक साझा करती हैं और अगले नंबर छूट जाते हैं।RANK() OVER (ORDER BY total DESC)
बिना अंतराल की रैंक; बराबर वाली पंक्तियाँ एक रैंक साझा करती हैं और कुछ भी नहीं छूटता।DENSE_RANK() OVER (ORDER BY total DESC)
क्रमबद्ध विंडो को n लगभग बराबर भागों में बाँटता है।NTILE(4) OVER (ORDER BY total DESC)
पड़ोसी पंक्तियों को देखना
n पंक्तियाँ पीछे का मान; जब ऐसी कोई पंक्ति न हो तो डिफ़ॉल्ट उसका स्थान लेता है।LAG(total, 1, 0) OVER (ORDER BY created_at)
n पंक्तियाँ आगे का मान; जब ऐसी कोई पंक्ति न हो तो डिफ़ॉल्ट उसका स्थान लेता है।LEAD(total, 1, 0) OVER (ORDER BY created_at)
विंडो पर एग्रीगेट
पंक्तियों को समेटे बिना चलता हुआ या विभाजन-वार कुल।SUM(total) OVER (ORDER BY created_at)
चलता हुआ या विभाजन-वार औसत।AVG(total) OVER (PARTITION BY user_id)
चलती हुई या विभाजन-वार पंक्ति गिनती।COUNT(*) OVER (PARTITION BY user_id)
विंडो या विभाजन पर सबसे निम्न मान।MIN(total) OVER (PARTITION BY user_id)
विंडो या विभाजन पर सबसे ऊँचा मान।MAX(total) OVER (PARTITION BY user_id)
ORDER BY के साथ SUM और शुरू से खुला फ़्रेम; हर पंक्ति अपने सहित अपने तक सब कुछ जोड़ती है।SUM(total) OVER (ORDER BY created_at ROWS UNBOUNDED PRECEDING)
मौजूदा पंक्ति से पहले और बाद की n पंक्तियों के फ़्रेम पर AVG।AVG(total) OVER (ORDER BY created_at ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
पहला, आख़िरी और पर्सेंटाइल
विंडो के क्रम में पहला मान।FIRST_VALUE(total) OVER (ORDER BY total DESC)
फ़्रेम का आख़िरी मान; UNBOUNDED FOLLOWING के बिना फ़्रेम मौजूदा पंक्ति पर रुक जाता है।LAST_VALUE(total) OVER (ORDER BY total ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
विंडो के क्रम की n-वीं पंक्ति का मान।NTH_VALUE(total, 2) OVER (ORDER BY total DESC)
किसी पंक्ति की सापेक्ष रैंक, 0 से 1 तक।PERCENT_RANK() OVER (ORDER BY total)
मौजूदा पंक्ति पर या उससे पहले की पंक्तियों का अनुपात, 1/n से 1 तक।CUME_DIST() OVER (ORDER BY total)
OVER क्लॉज़
वह विंडो परिभाषित करता है जिसे हर फ़ंक्शन पढ़ता है।<fn>() OVER (PARTITION BY user_id ORDER BY created_at)
हर पंक्ति-समूह के लिए विंडो फिर से शुरू होती है।PARTITION BY user_id
हर विभाजन के भीतर पंक्तियों को क्रमबद्ध करता है।ORDER BY created_at
सरकते फ़्रेम को सीमित करता है, जैसे पिछली पंक्तियों से अगली पंक्तियों तक।ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
फ़्रेम को पंक्ति-स्थिति नहीं, मानों के आधार पर सीमित करता है; CURRENT ROW बराबर वाली पंक्तियों को शामिल करता है, और ORDER BY के अंतर्गत यही डिफ़ॉल्ट फ़्रेम है।RANGE BETWEEN 100 PRECEDING AND CURRENT ROW
ORDER BY की बराबर वाली पंक्तियों के समूहों से फ़्रेम को सीमित करता है।GROUPS BETWEEN 1 PRECEDING AND CURRENT ROW
मौजूदा पंक्ति को फ़्रेम से हटाता है; EXCLUDE TIES उसके बराबर वालों को हटाता है।ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING EXCLUDE CURRENT ROW
प्रति क्वेरी एक बार विंडो को नाम देता है ताकि कई OVER क्लॉज़ उसे पुनः उपयोग कर सकें।WINDOW w AS (PARTITION BY user_id ORDER BY created_at)
विंडो लागू होने से पहले, विंडो एग्रीगेट द्वारा पढ़ी जाने वाली पंक्तियों को सीमित करता है।SUM(total) FILTER (WHERE status = 'paid') OVER (ORDER BY created_at)