Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL विंडो फ़ंक्शंस के साथ बुनियादी डेटा विश्लेषण सीखें

यह लेख टी-एसक्यूएल (ट्रांजैक्ट-एसक्यूएल) विंडो फ़ंक्शन और दिन-प्रतिदिन के डेटा विश्लेषण कार्यों में उनके मूल उपयोग के बारे में है।

जब डेटा विश्लेषण की बात आती है तो टी-एसक्यूएल के कई विकल्प होते हैं। हालांकि, जब समय के साथ सुधार और विंडो फ़ंक्शंस की शुरूआत पर विचार किया जाता है, तो टी-एसक्यूएल बुनियादी स्तर पर डेटा विश्लेषण करने में सक्षम है, और कुछ मामलों में, इससे भी आगे।

एसक्यूएल विंडो फंक्शंस के बारे में

सबसे पहले, आइए पहले Microsoft दस्तावेज़ के संदर्भ में SQL Window फ़ंक्शंस से परिचित हों।

माइक्रोसॉफ्ट परिभाषा

विंडो फ़ंक्शन विंडो में प्रत्येक पंक्ति के लिए एक मान की गणना करता है।

सरल परिभाषा

विंडो फ़ंक्शन हमें परिणाम सेट के एक विशेष भाग (विंडो) पर ध्यान केंद्रित करने में मदद करता है ताकि हम संपूर्ण परिणाम सेट के बजाय केवल उस विशिष्ट भाग (विंडो) पर डेटा विश्लेषण कर सकें।

दूसरे शब्दों में, SQL विंडो फ़ंक्शन डेटा विश्लेषण उद्देश्यों के लिए परिणाम सेट को कई छोटे सेटों में बदल देते हैं।

परिणाम सेट क्या होता है

सीधे शब्दों में कहें, एक परिणाम सेट में SQL क्वेरी चलाकर पुनर्प्राप्त किए गए सभी रिकॉर्ड होते हैं।

उदाहरण के लिए, हम उत्पाद . नाम की एक टेबल बना सकते हैं और इसमें निम्न डेटा डालें:

-- (1) उत्पाद तालिका बनाएं तालिका बनाएं [डीबीओ]। [उत्पाद] ( [उत्पाद आईडी] पूर्ण प्राथमिक कुंजी नहीं है, [नाम] वचर (40) शून्य नहीं, [क्षेत्र] वचर (40) शून्य नहीं) -- (2) उत्पाद तालिका में डालें उत्पाद (उत्पाद आईडी, नाम, क्षेत्र) मान (1, 'लैपटॉप', 'यूके'), (2, 'पीसी', 'यूएई'), (3, 'आईपैड', 'यूके')

अब, नीचे दी गई स्क्रिप्ट का उपयोग करके प्राप्त परिणाम सेट में उत्पाद . की सभी पंक्तियां होंगी तालिका:

-- (3) परिणाम सेट चुनें [उत्पाद आईडी], [नाम], [क्षेत्र] उत्पाद से

विंडो क्या है

विंडो की अवधारणा को पहले समझना महत्वपूर्ण है क्योंकि यह SQL विंडो फ़ंक्शंस से संबंधित है। इस संदर्भ में, विंडो परिणाम सेट के एक विशिष्ट भाग को लक्षित करके आपके दायरे को कम करने का एक तरीका है (जैसा कि हमने पहले ही ऊपर उल्लेख किया है)।

अब आप सोच रहे होंगे - 'परिणाम सेट के एक विशिष्ट भाग को लक्षित करने' का वास्तव में क्या अर्थ है?

हमने जिस उदाहरण को देखा, उस पर लौटते हुए, हम परिणाम सेट को दो विंडो में विभाजित करके उत्पाद क्षेत्र के आधार पर एक SQL विंडो बना सकते हैं।

Row_Number को समझना ()

आगे बढ़ने के लिए, हमें Row_Number() फ़ंक्शन . का उपयोग करना होगा जो अस्थायी रूप से आउटपुट पंक्तियों को एक क्रम संख्या देता है।

उदाहरण के लिए, यदि हम ProductID, . के आधार पर परिणाम सेट में एक पंक्ति संख्या जोड़ना चाहते हैं हमें ROW_NUMBER() . का उपयोग करना होगा इसे उत्पाद आईडी द्वारा निम्नानुसार ऑर्डर करने के लिए:

--ProductIDSELECT ProductID,ROW_NUMBER() OVER (ORDER BY ProductID) AS SrNo,Name,Region From Product
द्वारा सेट किए गए परिणाम को ऑर्डर करने के लिए row_number() फ़ंक्शन का उपयोग करना

अब, अगर हम Row_Number() फ़ंक्शन . चाहते हैं ProductID . द्वारा निर्धारित परिणाम का आदेश देने के लिए अवरोही, फिर ProductID . के आधार पर आउटपुट पंक्तियों का क्रम इस प्रकार बदलेगा:

--ProductID अवरोही द्वारा निर्धारित परिणाम को क्रमित करने के लिए row_number() फ़ंक्शन का उपयोग करना। 

अभी तक कोई SQL विंडो नहीं है, क्योंकि केवल एक चीज जो हमने की है, वह है विशिष्ट मानदंडों के अनुसार सेट का आदेश देना। जैसा कि पहले चर्चा की गई थी, विंडोिंग का अर्थ है परिणाम सेट को कई छोटे सेटों में तोड़ना ताकि उनमें से प्रत्येक का अलग-अलग विश्लेषण किया जा सके।

Row_Number() के साथ एक विंडो बनाना

हमारे परिणाम सेट में एक SQL विंडो बनाने के लिए, हमें इसमें शामिल किसी भी कॉलम के आधार पर इसे विभाजित करना होगा।

अब हम क्षेत्र द्वारा निर्धारित परिणाम को इस प्रकार विभाजित कर सकते हैं:

--क्षेत्र के आधार पर SQL विंडो बनाना ROW_NUMBER() OVER (क्षेत्र के अनुसार ORDER BY क्षेत्र) के रूप में Region_Serial_Number, नाम, क्षेत्र से dbo.Product

चुनें - खंड के ऊपर

दूसरे शब्दों में, चुनें ओवर . के साथ क्लॉज परिणाम सेट को छोटी विंडो में विभाजित करके SQL विंडो फ़ंक्शन के लिए मार्ग प्रशस्त करता है।

Microsoft दस्तावेज़ के अनुसार, चुनें ओवर . के साथ क्लॉज एक विंडो को परिभाषित करता है जिसे तब किसी भी विंडो फ़ंक्शन द्वारा उपयोग किया जा सकता है।

अब, रसोई उत्पाद . नामक एक तालिका बनाते हैं इस प्रकार:

टेबल बनाएं [डीबीओ]। ] INT नॉट न्यूल, [कीमत] दशमलव (10,2) न्यूल नहीं); डीबीओ में प्रवेश करें। ','यूके', 20,12.00), ('टोस्टर', 'फ्रांस', 10,10.00), ('टोस्टर', 'यूएई', 10,12.00), ('किचन क्लॉक', 'यूके', 50 ,20.00),('किचन क्लॉक', 'यूएई', 35,15.00)

अब, तालिका देखें:

चुनें [KitchenProductId], [Name], [देश], [मात्रा], [कीमत] dbo.KitchenProduct से

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

-- प्रत्येक उत्पाद को अपनी श्रृंखला में देखना चुनें ROW_NUMBER() OVER (नाम के आधार पर विभाजन) Product_SrNo,Name, Country,QuantityFROM dbo.KitchenProduct

संगतता (चुनें - खंड से अधिक)

माइक्रोसॉफ्ट के दस्तावेज़ों के अनुसार , चुनें - ओवर क्लॉज निम्नलिखित SQL डेटाबेस संस्करणों के साथ संगत है:

  1. एसक्यूएल सर्वर 2008 और ऊपर की ओर
  2. Azure SQL डेटाबेस
  3. Azure SQL डेटा वेयरहाउस
  4. समानांतर डेटा वेयरहाउस

वाक्यविन्यास

चुनें - ओवर (<कॉलम द्वारा विभाजन> <कॉलम> द्वारा ऑर्डर करें)

कृपया ध्यान दें कि मैंने बनाने के लिए वाक्य रचना को सरल बना दिया है टी समझने में आसान; कृपया देखें Microsoft दस्तावेज़ देखने के लिए पूर्ण वाक्य रचना।

पूर्वापेक्षाएँ

यह लेख मूल रूप से शुरुआती लोगों के लिए लिखा गया है, लेकिन अभी भी कुछ पूर्वापेक्षाएँ हैं जिन्हें ध्यान में रखा जाना चाहिए।

टी-एसक्यूएल से परिचित

यह लेख मानता है कि पाठकों को टी-एसक्यूएल का बुनियादी ज्ञान है और वे बुनियादी एसक्यूएल स्क्रिप्ट लिखने और चलाने में सक्षम हैं।

बिक्री नमूना तालिका सेट करें

इस आलेख के लिए निम्न नमूना तालिका की आवश्यकता है ताकि हम अपने SQL विंडो फ़ंक्शन उदाहरण चला सकें:

-- (1) सेल्स सैंपल टेबल बनाएं टेबल बनाएं [डीबीओ]। [राजस्व] दशमलव(10,2), बाधा [पीके_सेल्स] प्राथमिक कुंजी ([बिक्री आईडी]));जाओ-- (2) बिक्री नमूना तालिका को पॉप्युलेट करना SET IDENTITY_INSERT [dbo]। [बिक्री] [dbo] में शामिल होना। [बिक्री] ] ([SalesId], [उत्पाद], [तिथि], [राजस्व]) मान (1, N'Laptop', N'2017-01-01 00:00:00', CAST(200.00 AS Decimal(10, 2) ))) INSERT INTO [dbo]। ', CAST(100.00 AS Decimal(10, 2))) INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (3, N'Mobile Phone', N'2018-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2))) INSERT INTO [dbo].[Sales] ([SalesId], [Product], [Date], [Revenue ]) VALUES (4, N'Accessories', N'2018-01-01 00:00:00', CAST(150.00 AS Decimal(10, 2))) INSERT INTO [dbo]।[Sales] ([SalesId] , [उत्पाद], [दिनांक], [राजस्व]) मान (5, N'iPad', N'2019-01- 01 00:00:00', CAST(300.00 AS Decimal(10, 2))) INSERT INTO [dbo]। [Sales] ([SalesId], [Product], [Date], [Revenue]) VALUES (6, N'PC', N'2019-01-01 00:00:00', CAST(200.00 AS Decimal(10, 2))) INSERT INTO [dbo]।[Sales] ([SalesId], [Product], [ दिनांक], [राजस्व]) VALUES (7, N'Laptop', N'2019-01-01 00:00:00', CAST(300.00 AS Decimal(10, 2))) SET IDENTITY_INSERT [dbo]। [बिक्री ] बंद

निम्न स्क्रिप्ट चलाकर सभी बिक्री देखें:

-- बिक्री देखेंचुनें [SalesId],[Product],[Date],[Revenue]FROM dbo.Sales

ग्रुप बाय बनाम SQL विंडो फंक्शन्स

कोई आश्चर्य कर सकता है - ग्रुप बाय क्लॉज और SQL विंडो फ़ंक्शंस का उपयोग करने में क्या अंतर है?

खैर, इसका उत्तर नीचे दिए गए उदाहरणों में है।

उदाहरण के आधार पर समूह बनाएं

उत्पाद के आधार पर कुल बिक्री देखने के लिए, हम निम्नानुसार समूह का उपयोग कर सकते हैं:

-- Group BySELECT Product का उपयोग करके उत्पाद द्वारा कुल बिक्री, SUM(REVENUE) AS Total_SalesFROM dbo.SalesGROUP by ProductORDER by Product

इसलिए, ग्रुप बाय क्लॉज हमें कुल बिक्री देखने में मदद करता है। कुल बिक्री मूल्य एक ही पंक्ति में सभी समान उत्पादों के लिए राजस्व का योग है जिसमें कोई समूह द्वारा खंड का उपयोग नहीं किया गया है। क्या होगा यदि हम कुल बिक्री के साथ-साथ प्रत्येक व्यक्तिगत उत्पाद के राजस्व (बिक्री) को देखने में रुचि रखते हैं?

यहीं पर SQL विंडो फंक्शन काम में आते हैं।

SQL विंडो फ़ंक्शन उदाहरण

सभी समान उत्पादों द्वारा उत्पाद, राजस्व और कुल राजस्व देखने के लिए, हमें OVER() का उपयोग करके डेटा को उप-उत्पाद के आधार पर विभाजित करना होगा। इस प्रकार:

-- SQL विंडो फ़ंक्शन का उपयोग करके उत्पाद द्वारा कुल बिक्री चुनें उत्पाद, राजस्व, योग (राजस्व) से अधिक (उत्पाद द्वारा विभाजन) कुल_बिक्री dbo.बिक्री से

आउटपुट इस प्रकार होना चाहिए:

इसलिए, अब हम आसानी से उस उत्पाद की कुल बिक्री के साथ-साथ प्रत्येक व्यक्तिगत उत्पाद की बिक्री देख सकते हैं। उदाहरण के लिए, पीसी . के लिए आय 100.00 है लेकिन कुल बिक्री (PC . के लिए राजस्व का योग) उत्पाद) 300.00 है क्योंकि दो अलग-अलग पीसी मॉडल बेचे जा रहे थे।

समग्र कार्यों के साथ बुनियादी विश्लेषण

डेटा के एक सेट पर गणना करने के बाद कुल फ़ंक्शन एक मान लौटाते हैं।

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

सामान्य समग्र कार्य

सबसे आम समग्र कार्य हैं:

  1. योग
  2. गणना
  3. न्यूनतम
  4. अधिकतम
  5. औसत (औसत)

उत्पाद द्वारा समग्र डेटा विश्लेषण

कुल कार्यों की सहायता से उप-उत्पाद के आधार पर सेट किए गए परिणाम का विश्लेषण करने के लिए, हमें बस ओवर () कथन के अंदर उप-उत्पाद विभाजन के साथ एक समग्र फ़ंक्शन का उपयोग करना होगा:

-- कुल कार्यों का उपयोग करके उत्पाद द्वारा डेटा विश्लेषण चुनें उत्पाद, राजस्व, योग (राजस्व) से अधिक (उत्पाद द्वारा विभाजन) कुल_बिक्री के रूप में, न्यूनतम (राजस्व) से अधिक (उत्पाद द्वारा विभाजन) न्यूनतम_बिक्री के रूप में, अधिकतम (राजस्व) से अधिक (भाग द्वारा) PRODUCT) अधिकतम_बिक्री के रूप में, औसत (राजस्व) से अधिक (उत्पाद द्वारा विभाजन) औसत_बिक्री से dbo.बिक्री
के रूप में

यदि आप पीसी . पर करीब से नज़र डालें तो या लैपटॉप उत्पाद, आप देखेंगे कि SQL विंडो फ़ंक्शन के साथ-साथ एग्रीगेट फ़ंक्शन एक साथ कैसे काम कर रहे हैं।

ऊपर के उदाहरण में, हम देख सकते हैं कि पीसी . के लिए राजस्व मूल्य पहली बार 100.00 और अगली बार 200.00 है, लेकिन कुल बिक्री राशि 300.00 है। बाकी समग्र कार्यों के लिए समान जानकारी देखी जा सकती है।

दिनांक के आधार पर डेटा विश्लेषण एकत्र करें

अब, कुल कार्यों के साथ संयोजन में SQL विंडो फ़ंक्शंस का उपयोग करके उत्पादों का कुछ डेटा विश्लेषण बाय-डेट आधार पर करते हैं।

इस बार, हम परिणाम को उत्पाद के बजाय तिथि के अनुसार विभाजित करने जा रहे हैं:

-- कुल कार्यों का उपयोग करके तिथि के अनुसार डेटा विश्लेषण चुनें उत्पाद, तिथि, राजस्व, योग (राजस्व) ओवर (दिनांक तक विभाजन) कुल_बिक्री के रूप में, न्यूनतम (राजस्व) से अधिक (दिनांक तक विभाजन) न्यूनतम_बिक्री के रूप में, अधिकतम (राजस्व) से अधिक ( पार्टिशन बाय DATE) अधिकतम_बिक्री के रूप में, औसत (राजस्व) ओवर (दिनांक तक विभाजन) औसत_बिक्री के रूप में dbo.बिक्री से

इसके साथ, हमने SQL विंडो फ़ंक्शन दृष्टिकोण का उपयोग करते हुए बुनियादी डेटा विश्लेषण तकनीकों को सीखा है।

करने के लिए चीज़ें

अब जब आप SQL विंडो फ़ंक्शंस से परिचित हो गए हैं, तो कृपया निम्न प्रयास करें:

  1. हमारे द्वारा देखे गए उदाहरणों को ध्यान में रखते हुए, इस लेख में उल्लिखित नमूना डेटाबेस पर SQL विंडो फ़ंक्शन का उपयोग करके बुनियादी डेटा विश्लेषण करें।
  2. बिक्री नमूना तालिका में ग्राहक कॉलम जोड़ना और देखें कि आपका डेटा विश्लेषण कितना समृद्ध हो सकता है जब इसमें एक और कॉलम (ग्राहक) जोड़ा जाता है।
  3. बिक्री नमूना तालिका में एक क्षेत्र कॉलम जोड़ना और क्षेत्र के अनुसार समग्र कार्यों का उपयोग करके बुनियादी डेटा विश्लेषण करना।

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आपके सबसे कीमती कब्जे का ट्रैक रखने के लिए एक डेटा मॉडल

  2. चुनिंदा स्टेटमेंट कैसे लिखें

  3. शुरुआती के लिए एसक्यूएल और ऑपरेटर

  4. 2008 R2 बग फिक्स जो RCSI को तोड़ता है

  5. उन लापता इंडेक्स को आँख बंद करके न बनाएं!