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

SQL सर्वर में क्लॉज द्वारा ओवर क्लॉज और पार्टिशन के साथ रनिंग टोटल की गणना करना

आप अक्सर ऐसे परिदृश्यों में आते हैं जहां आपको एक मात्रा के चल रहे कुल की गणना करनी होती है।

एक रनिंग टोटल एक कॉलम के सभी सेल में मानों के योग को संदर्भित करता है जो उस विशेष कॉलम में अगले सेल से पहले होता है।

आइए इसे स्पष्ट करने के लिए एक उदाहरण देखें।

जैसा कि आप देख सकते हैं, RuningAgeTotal कॉलम की तीसरी पंक्ति में StudentAge कॉलम की 1 से 3 पंक्तियों में सभी मानों का योग होता है, अर्थात 14 + 12 + 13 =39।

इसी तरह, RuningAgeTotal कॉलम की 4 पंक्ति का मान 49 है, जो कि StudentAge कॉलम की 1 से 4 पंक्तियों के मानों का योग है।

SQL सर्वर में, ओवर क्लॉज का उपयोग रनिंग टोटल की गणना के लिए किया जा सकता है।

आइए नीचे दिए गए उदाहरण की सहायता से इसका उपयोग करने का तरीका जानें।

एसक्यूएल रनिंग टोटल की गणना का सरल उदाहरण

चल रहे कुल की गणना करने वाली क्वेरी लिखने से पहले आइए कुछ डमी डेटा बनाएं।

सबसे पहले, निम्न स्क्रिप्ट निष्पादित करें:

CREATE DATABASE School
GO

USE School
GO

CREATE TABLE Students
(
	Id INT PRIMARY KEY IDENTITY,
	StudentName VARCHAR (50),
	StudentGender VARCHAR (50),
	StudentAge INT
)
GO

INSERT INTO Students VALUES ('Sally', 'Female', 14 )
INSERT INTO Students VALUES ('Edward', 'Male', 12 )
INSERT INTO Students VALUES ('Jon', 'Male', 13 )
INSERT INTO Students VALUES ('Liana', 'Female', 10 )
INSERT INTO Students VALUES ('Ben', 'Male', 11 )
INSERT INTO Students VALUES ('Elice', 'Female', 12 )
INSERT INTO Students VALUES ('Nick', 'Male', 9 )
INSERT INTO Students VALUES ('Josh', 'Male', 12 )
INSERT INTO Students VALUES ('Liza', 'Female', 10 )
INSERT INTO Students VALUES ('Wick', 'Male', 15 )

यह स्क्रिप्ट स्कूल डेटाबेस के भीतर छात्र तालिका बनाती है। तालिका में चार कॉलम हैं:आईडी, छात्र नाम, छात्र लिंग और छात्र। INSERT स्टेटमेंट डेटाबेस में 10 डमी रिकॉर्ड जोड़ता है।

sql रनिंग टोटल की गणना करने के लिए, हमें OVER क्लॉज का उपयोग करना होगा और उस कॉलम को जोड़ना होगा जिसके लिए हम रनिंग टोटल की गणना करना चाहते हैं। निम्न स्क्रिप्ट स्टूडेंटएज कॉलम में कुल मानों की गणना करती है और परिणाम को रनिंगएज टोटल कॉलम में जोड़ती है।

USE School
SELECT Id, StudentName, StudentGender, StudentAge,
SUM (StudentAge) OVER (ORDER BY Id) AS RunningAgeTotal
FROM Students

उपरोक्त स्क्रिप्ट में, सेलेक्ट स्टेटमेंट स्टूडेंटनाम, स्टूडेंटजेंडर और स्टूडेंटएज कॉलम के साथ-साथ रनिंग टोटल कॉलम, यानी रनिंगएज टोटल को पुनः प्राप्त करता है। SUM एग्रीगेट फ़ंक्शन, StudentAge कॉलम में मान जोड़ता है और OVER क्लॉज़ यह निर्धारित करता है कि जोड़ को Id कॉलम द्वारा ऑर्डर किए गए रनिंग टोटल के रूप में किया जाना चाहिए। उपरोक्त स्क्रिप्ट का आउटपुट इस प्रकार है:

एसक्यूएल रनिंग औसत की गणना करें

छात्र तालिका में सभी छात्रों की औसत आयु की गणना करने के लिए आप अंतिम खंड में स्क्रिप्ट को संशोधित कर सकते हैं। ऐसा करने के लिए, निम्न स्क्रिप्ट निष्पादित करें:

USE School
SELECT Id, StudentName, StudentGender, StudentAge,
SUM (StudentAge) OVER (ORDER BY Id) AS RunningAgeTotal,
AVG (StudentAge) OVER (ORDER BY Id) AS RunningAgeAverage
FROM Students

जैसा कि आप देख सकते हैं, हम StudentAge कॉलम में सभी छात्रों की औसत आयु की गणना करने के लिए AVG एग्रीगेट फ़ंक्शन का उपयोग करते हैं। उपरोक्त स्क्रिप्ट का आउटपुट इस तरह दिखता है:

RuningAgeAverage कॉलम की तीसरी पंक्ति पर एक नज़र डालें। इसमें स्टूडेंटएज कॉलम में 1 से 3 पंक्तियों के मानों का औसत होता है, यानी (14 + 12 + 13)/3 =13.

कॉलम मानों के आधार पर रनिंग टोटल का विभाजन

आप किसी विशेष कॉलम में मानों के आधार पर डेटा को विभाजित करके एक रनिंग टोटल की गणना भी कर सकते हैं। उदाहरण के लिए, आप लिंग के आधार पर विभाजित छात्रों की आयु के कुल रनिंग sql की गणना कर सकते हैं। ऐसा करने के लिए, आपको ओवर क्लॉज के साथ पार्टिशन बाय स्टेटमेंट का उपयोग करना होगा।

निम्न उदाहरण पर एक नज़र डालें:

USE School
SELECT Id, StudentName, StudentGender, StudentAge,
SUM (StudentAge) OVER (PARTITION BY StudentGender ORDER BY Id) AS RunningAgeTotal
FROM Students

सभी रिकॉर्ड्स के लिए रनिंग टोटल की गणना और लिंग के आधार पर रनिंग टोटल की गणना के बीच एकमात्र अंतर OVER क्लॉज के बाद कोष्ठक के भीतर PARTITION BY StudentGender क्लॉज का उपयोग है। उपरोक्त स्क्रिप्ट, StudentAge कॉलम में मानों के लिए रनिंग टोटल की गणना करती है, जिसे StudentGender कॉलम में मानों से विभाजित किया जाता है। आउटपुट इस तरह दिखता है।

अब, RuningAgeTotal कॉलम (लाल आयत द्वारा हाइलाइट किया गया) में पहले चार मानों पर एक नज़र डालें। ये मान छात्राओं का रनिंग टोटल हैं। इसी तरह, अंतिम 6 पंक्तियों (हरे आयत द्वारा हाइलाइट की गई) में छात्र तालिका में पुरुष छात्रों की आयु का कुल योग होता है।

किसी कॉलम में डुप्लीकेट कॉलम होने पर OVER की समस्या

एक समस्या तब उत्पन्न होती है जब किसी चल रहे कुल की गणना करने के लिए डुप्लिकेट मानों वाले कॉलम का उपयोग ओवर क्लॉज के साथ किया जाता है। छात्र आयु कॉलम पर एक नज़र डालें। एलिस, एडवर्ड और जोश सभी की उम्र समान है, यानी 12. इसी तरह, लियाना और लिज़ा का भी स्टूडेंटएज कॉलम में समान मान है, यानी 10.

यदि आप ओवर क्लॉज के बाद कोष्ठक के भीतर स्टूडेंटएज कॉलम निर्दिष्ट करके रनिंग टोटल की गणना करने का प्रयास करते हैं, तो आपको कुछ अजीब परिणाम दिखाई देंगे। आइए इस क्वेरी को चलाते हैं:

USE School
SELECT Id, StudentName, StudentGender, StudentAge,
SUM (StudentAge) OVER (ORDER BY StudentAge) AS RunningAgeTotal
FROM Students

उपरोक्त क्वेरी का आउटपुट इस प्रकार है:

रनिंगएज टोटल कॉलम की दूसरी पंक्ति में, मान 29 है। हालांकि, यह 19 होना चाहिए क्योंकि स्टूडेंटएज कॉलम की 1 और 2 पंक्तियों में क्रमशः 9 और 10 हैं। इस स्थिति में, क्योंकि StudentAge कॉलम की 2 और 3 पंक्तियों में एक डुप्लीकेट मान होता है, यानी 10, RuningAgeTotal कॉलम की दूसरी पंक्ति के मान की गणना 9, 10 और 10 को जोड़कर की जाती है। इसी तरह, 3 पंक्ति के लिए रनिंगएज टोटल कॉलम, दूसरी पंक्ति का मान जो कि 29 है, का उपयोग किया जाता है।

इसी तरह, यदि आप RuningAgeTotal कॉलम की 5 पंक्ति को देखते हैं, तो मान 76 है। यह वास्तव में 40 + 12 =52 होना चाहिए। हालाँकि, चूंकि StudentAge कॉलम की 5, 6 और 7 पंक्तियों में डुप्लिकेट मान हैं, अर्थात 12, रनिंग टोटल की गणना 40 + 12 + 12 + 12 =76 जोड़कर की जाती है। इस रनिंग टोटल का उपयोग रनिंगएज टोटल कॉलम की पंक्तियों 6 और 7 के लिए किया गया है क्योंकि स्टूडेंटएज कॉलम की पंक्तियों 6 और 7 में पंक्ति के रूप में डुप्लिकेट मान होते हैं। 5.

इस स्थिति से बचने के लिए, आपको OVER क्लॉज के साथ डुप्लिकेट मानों वाले कॉलम का उपयोग बंद करना होगा। प्राथमिक कुंजी कॉलम हमेशा ओवर क्लॉज के साथ उपयोग करने के लिए एक अच्छा विकल्प होता है क्योंकि इसमें केवल अद्वितीय मान होते हैं।

यह भी पढ़ें:

ओवर और पार्टिशन बाय फंक्शन का उपयोग करके डेटा को समूहीकृत करना

OVER और PARTITION BY

. का उपयोग करने पर पाठ

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बैकएंड प्रक्रिया को स्वचालित करने के लिए पायथन को SQL सर्वर से कैसे कनेक्ट करें

  2. SQL सर्वर (T-SQL) में विभाजित तालिका के लिए विभाजन कॉलम खोजें

  3. SQL सर्वर के समतुल्य डेटाबेस दिखाएँ - sp_databases

  4. कॉलम के रूप में दिनांक के साथ गतिशील रूप से कैसे पिवट करें?

  5. SQL सर्वर 2016:एक डेटाबेस पुनर्स्थापित करें