DBMS क्वेरी भाषा के रूप में SQL की बहुमुखी प्रतिभा पिछले कुछ वर्षों में बढ़ी है। इसकी विशाल उपयोगिता और बहुमुखी प्रतिभा इसे हर डेटा विश्लेषक के लिए हमेशा पसंदीदा बनाती है।
SQL के नियमित कार्यों के अलावा कुछ उन्नत-स्तर के कार्य हैं। इन कार्यों को आमतौर पर विंडो फ़ंक्शंस के रूप में जाना जाता है। यदि आप जटिल डेटा के साथ काम कर रहे हैं और उन्नत गणना करना चाहते हैं, तो आप उनका उपयोग अपने डेटा का सर्वोत्तम उपयोग करने के लिए कर सकते हैं।
विंडो फ़ंक्शंस का महत्व
SQL में कई विंडो फ़ंक्शंस उपलब्ध हैं, और प्रत्येक आपको गणनाओं की एक श्रृंखला करने में मदद करेगा। विभाजन बनाने से लेकर पंक्तियों की रैंकिंग या पंक्तियों की संख्या निर्दिष्ट करने तक, ये विंडो फ़ंक्शंस थोड़ा-थोड़ा सब कुछ करते हैं।
जब आप किसी विशिष्ट डेटासेट, या पंक्तियों के संग्रह पर कुल फ़ंक्शन लागू कर रहे हों, तो विंडो फ़ंक्शंस फ़ायदेमंद होते हैं। ये कार्य GROUP BY द्वारा प्रदान किए गए एकत्रीकरण कार्यों से ऊपर और परे जाते हैं। हालाँकि, मुख्य अंतर यह है कि, ग्रुपिंग फ़ंक्शन के विपरीत, आपका डेटा एक पंक्ति में संयोजित नहीं होता है।
आप के भीतर विंडो फ़ंक्शंस का उपयोग नहीं कर सकते हैं कहाँ, से, और द्वारा समूह बनाएं बयान।
एक विंडो फ़ंक्शन का सिंटैक्स
जब आप किसी विंडो फ़ंक्शन को संदर्भित करते हैं, तो आपको डिफ़ॉल्ट सिंटैक्स संरचना का पालन करने की आवश्यकता होती है, ताकि यह ठीक से काम करे। यदि आप कमांड को गलत तरीके से स्ट्रक्चर करते हैं, तो आपको एक एरर मिलेगी और आपका कोड चलने में विफल हो जाएगा।
यहाँ डिफ़ॉल्ट सिंटैक्स है:
चुनना स्तंभनाम1,
{window_function}(columnname2)
ओवर ([कॉलमनाम द्वारा विभाजन] [कॉलमनाम 3 द्वारा आदेश]) new_column के रूप में
टेबल_नाम से;
कहाँ:
- coulmnname1 वह पहला कॉलम नाम है जिसे आप चुनना चाहते हैं।
- {window_function} योग, औसत, गिनती, पंक्ति_नंबर, रैंक, या सघन_रैंक जैसे कुल फ़ंक्शन का नाम है।
- columnname2 उस कॉलम का नाम है जिस पर आप विंडो फ़ंक्शन लागू कर रहे हैं।
- columnname3 तीसरा स्तंभ नाम है, जो विभाजन का आधार बनेगा।
- new_column नए कॉलम के लिए एक लेबल है जिसे आप का उपयोग करके लागू कर सकते हैं जैसा कीवर्ड।
- तालिका नाम स्रोत तालिका का नाम है।
विंडो फ़ंक्शंस कुछ से अलग हैं सबसे बुनियादी SQL कमांड. SQL में समग्र कार्यों के विपरीत, आप उन्नत कार्य करने के लिए इन विंडो फ़ंक्शंस का उपयोग कर सकते हैं।
डेटासेट तैयार करना
आप उपयोग कर सकते हैं तालिका बनाएं को बयान SQL में एक नई तालिका बनाएँ. यहां एक नमूना डेटासेट दिया गया है जिसका उपयोग यह मार्गदर्शिका कुछ विंडो फ़ंक्शंस को परिभाषित करने के लिए करेगी:
आर्डर की तारीख |
वर्ग |
रंग |
विक्रय कीमत |
मात्रा |
---|---|---|---|---|
08-11-2016 |
फ़ोनों |
काला |
907.152 |
6 |
12-06-2016 |
बाइंडर |
हरा |
18.504 |
3 |
11-10-2015 |
उपकरण |
पीला |
114.9 |
5 |
11-10-2015 |
टेबल |
भूरा |
1706.184 |
9 |
09-06-2014 |
फ़ोनों |
लाल |
911.424 |
4 |
09-06-2014 |
कागज़ |
सफ़ेद |
15.552 |
3 |
09-06-2014 |
बाइंडर |
काला |
407.976 |
3 |
09-06-2014 |
उपकरण |
पीला |
68.81 |
5 |
09-06-2014 |
बाइंडर |
हरा |
2.544 |
3 |
09-06-2014 |
भंडारण |
नारंगी |
665.88 |
6 |
09-06-2014 |
भंडारण |
नारंगी |
55.5 |
2 |
15-04-2017 |
फ़ोनों |
काला |
213.48 |
3 |
05-12-2016 |
बाइंडर |
हरा |
22.72 |
4 |
22-11-2015 |
उपकरण |
हरा |
60.34 |
7 |
22-11-2015 |
कुर्सियों |
गहरे भूरे रंग |
71.372 |
2 |
13-05-2014 |
फर्नीचर |
नारंगी |
190.92 |
5 |
योग समारोह समझाया
मान लीजिए कि आप श्रेणी कॉलम में प्रत्येक मूल्य के लिए कुल बिक्री की गणना करना चाहते हैं। यहां बताया गया है कि आप इसे कैसे कर सकते हैं:
चुननावर्ग, रंग,
योग (बिक्री_कीमत)
OVER (श्रेणी के अनुसार ऑर्डर) कुल_बिक्री के रूप में
साहिल.सैंपल से;
उपरोक्त कोड में, SQL कथन मूल डेटासेट से श्रेणी और रंग खींचता है। सम फंक्शन सेल_प्राइस कॉलम जोड़ता है। यह श्रेणी के अनुसार ऐसा करता है, क्योंकि ओवर क्लॉज श्रेणी कॉलम द्वारा आदेश देने को निर्दिष्ट करता है। अंतिम परिणाम इस प्रकार है:
औसत () विंडो फ़ंक्शन का उपयोग कैसे करें
योग फ़ंक्शन की तरह, आप डेटा की प्रति पंक्ति औसत की गणना कर सकते हैं औसत समारोह। योग के बजाय, आपको औसत बिक्री वाला एक कॉलम मिलेगा।
चुननावर्ग, रंग,
औसत (बिक्री_कीमत)
OVER (श्रेणी के अनुसार ऑर्डर) avg_sales के रूप में
साहिल.सैंपल से;
काउंट () विंडो फंक्शन का उपयोग करना सीखें
योग और औसत कार्यों के समान, SQL में काउंट विंडो फ़ंक्शन बहुत सीधा है और अन्य दो कार्यों के समान ही काम करता है। जब आप काउंट फ़ंक्शन पास करते हैं, तो आपको नए कॉलम में प्रत्येक मान की कुल संख्या मिलती है।
यहां बताया गया है कि आप गिनती की गणना कैसे कर सकते हैं:
चुननावर्ग, रंग,
गिनती (श्रेणी)
OVER (श्रेणी के अनुसार क्रम) AS item_count
साहिल.सैंपल से;
Row_Number() विंडो फ़ंक्शन
ऊपर सूचीबद्ध कुछ अन्य विंडो फ़ंक्शंस के विपरीत, row_number() थोड़ा अलग तरीके से काम करता है। row_number() फ़ंक्शन क्लॉज द्वारा क्रम के आधार पर प्रत्येक पंक्ति को एक पंक्ति संख्या प्रदान करता है। प्रारंभिक पंक्ति संख्या 1 है; row_number अंत तक प्रत्येक पंक्ति के लिए एक संबंधित मान प्रदान करता है।
यहाँ एक row_number() फ़ंक्शन की मूल संरचना है:
चुननावर्ग, रंग,
पंक्ति नंबर()
OVER (श्रेणी के अनुसार क्रम) AS item_number
साहिल.सैंपल से;
लेकिन क्या होता है यदि आप प्रत्येक श्रेणी आइटम के लिए अलग-अलग पंक्ति संख्या निर्दिष्ट करना चाहते हैं? उपरोक्त सिंटैक्स एक रोलिंग सीरियल नंबर सेट करता है, भले ही श्रेणी के भीतर संग्रहीत आइटम। उदाहरण के लिए, उपकरणों की श्रेणी की अपनी विशिष्ट संख्या होनी चाहिए, उसके बाद बाइंडर, और इसी तरह।
आप उपयोग कर सकते हैं PARTITION इस सरल, फिर भी व्यावहारिक कार्य को करने के लिए कार्य करें। विभाजन कीवर्ड प्रत्येक श्रेणी आइटम के आधार पर नामित पंक्ति संख्या निर्दिष्ट करता है।
चुननावर्ग, रंग,
पंक्ति नंबर()
OVER (श्रेणी के अनुसार श्रेणी के अनुसार विभाजन) AS item_number
साहिल.सैंपल से;
रैंक() और Dense_Rank() फ़ंक्शंस
पद() कार्य से भिन्न कार्य करता है पंक्ति नंबर() समारोह। रैंक मानों को परिभाषित करने के लिए आधार के रूप में उपयोग करने के लिए आपको फ़ंक्शन द्वारा ऑर्डर के भीतर कॉलम नाम निर्दिष्ट करने की आवश्यकता है। उदाहरण के लिए, निम्न कोड उदाहरण में, आप फ़ंक्शन द्वारा क्रम में रंग कॉलम का उपयोग कर सकते हैं। क्वेरी तब उस क्रम का उपयोग प्रत्येक पंक्ति को रैंक मान निर्दिष्ट करने के लिए करेगी।
SQL में रैंक फ़ंक्शन पास करने के लिए आप नीचे दिए गए कोड सिंटैक्स का उपयोग कर सकते हैं:
चुननावर्ग, रंग,
पद()
OVER (रंग द्वारा क्रम) AS item_rank
साहिल.सैंपल से;
यह फ़ंक्शन कैसे काम करता है यह समझने के लिए आउटपुट पर एक नज़र डालें।
फ़ंक्शन द्वारा क्रम रंग श्रेणी को क्रमबद्ध करता है, जबकि रैंक फ़ंक्शन प्रत्येक रंग को रैंक प्रदान करता है। हालाँकि, सभी समान रंग मानों की रैंक समान होती है, जबकि विभिन्न रंगों की अलग-अलग रैंक होती है। डेटासेट में काला रंग तीन बार आता है; 1, 2 और 3 का रैंक मान निर्दिष्ट करने के बजाय, काले रंग के आइटम को 1 का रैंक मिलता है।
हालाँकि, अगले रंग ब्राउन को रैंक 2 के बजाय रैंक 4 मिलता है। रैंक फ़ंक्शन मानों को छोड़ देता है और विभिन्न प्रविष्टियों को अगला कालानुक्रमिक मान प्रदान करता है। यदि आप अधिक सार्थक रैंक मान निर्दिष्ट करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं सघन रैंक () समारोह।
डेंस_रैंक फ़ंक्शन फ़ंक्शन द्वारा ऑर्डर के दौरान किसी भी रैंक मान को नहीं छोड़ता है। उदाहरण के लिए, पहले तीन कलर आइटम (ब्लैक) की रैंक 1 होगी। हालाँकि, निम्नलिखित रंग (भूरा) की रैंक 4 नहीं होगी, बल्कि रैंक 2 होगी, जो नंबरिंग सूची में निम्नलिखित कालानुक्रमिक संख्या है। डेंस_रैंक फ़ंक्शन एक अधिक व्यावहारिक विंडो फ़ंक्शन है क्योंकि यह वस्तुओं की सूची को सार्थक मान प्रदान करता है।
यहां बताया गया है कि आप SQL में डेंस_रैंक फ़ंक्शन का उपयोग कैसे कर सकते हैं:
चुननावर्ग, रंग,
सघन रैंक ()
OVER (रंग द्वारा क्रम) AS item_rank
साहिल.सैंपल से;
और यहाँ एक उदाहरण है कि इस फ़ंक्शन का आउटपुट कैसा दिखेगा:
बचाव के लिए एसक्यूएल कार्य करता है
उन्नत विश्लेषणात्मक कार्यों को करने के लिए SQL के विंडो फ़ंक्शंस आदर्श हैं। हालांकि, यह सुनिश्चित करने के लिए कि आपके कम्प्यूटेशनल कौशल शीर्ष पर हैं, आप बहुत से अन्य SQL कमांड का उपयोग कर सकते हैं। जब आप एक ही बार में कई परिणामों को जोड़ते हैं और उनकी गणना करते हैं, तो SQL की उप-प्रश्नों का उपयोग करने से बेहतर कुछ नहीं है।
उप-क्वेरी आपके परिणामों की गुणवत्ता बढ़ाने, उन्नत कार्य करने के लिए एक उत्कृष्ट उपकरण हैं। समय की आवश्यकता के आधार पर, आप अपने प्रश्नों को अनुकूलित कर सकते हैं और अपनी आवश्यकताओं के अनुरूप उन्हें अधिक प्रभावी बना सकते हैं।