सेसन वेरिएबल का उपयोग करके रनिंग टोटल
MySQL में एक कॉलम के मान को पिछली पंक्ति के मान के साथ जोड़कर (रनिंग टोटल/क्यूमुलेटिव सम) बनाने के लिए यूजर-डिफाइंड वेरिएबल (@var) का उपयोग करें।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable809(Price INT); Query OK, 0 rows affected (0.53 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable809 VALUES(40),(50),(60); Query OK, 3 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable809;
+-------+ | Price | +-------+ | 40 | | 50 | | 60 | +-------+ 3 rows in set (0.00 sec)
रनिंग टोटल क्वेरी
mysql> SELECT @currentSum := @currentSum + Price FROM DemoTable809;
परिणाम
+--------------------------------+ | @currentSum := @currentSum+Price | +--------------------------------+ | 40 | | 90 | | 150 | +--------------------------------+ 3 rows in set (0.00 sec)
क्वेरी व्याख्या
@currentSum- यूजर-डिफाइंड वेरिएबल (सेसन-स्कोप्ड):=- असाइनमेंट ऑपरेटर (SELECT में=तुलना होगा)- प्रत्येक पंक्ति के लिए, वेरिएबल पिछला मान रखता है और वर्तमान
Priceजोड़ता है - महत्वपूर्ण: वेरिएबल आरंभिकरण आवश्यक है
सही आरंभिकरण के साथ पूर्ण क्वेरी
SELECT @currentSum := 0; -- पहले आरंभ करें SELECT @currentSum := @currentSum + Price AS RunningTotal FROM DemoTable809;
CROSS JOIN के साथ आरंभिकरण (एक ही क्वेरी में)
SELECT t.Price, (@s := @s + t.Price) AS RunningTotal FROM DemoTable809 t CROSS JOIN (SELECT @s := 0) p ORDER BY t.Price;
परिणाम (क्रमबद्ध)
+-------+--------------+ | Price | RunningTotal | +-------+--------------+ | 40 | 40 | | 50 | 90 | | 60 | 150 | +-------+--------------+
विंडो फंक्शन (MySQL 8.0+ अनुशंसित)
आधुनिक MySQL में विंडो फंक्शन अधिक पठनीय और विश्वसनीय हैं:
SELECT Price,
SUM(Price) OVER (ORDER BY Price ROWS UNBOUNDED PRECEDING) AS RunningTotal
FROM DemoTable809;
लाभ विंडो फंक्शन के
- कोई वेरिएबल आरंभिकरण आवश्यक नहीं
- निर्धारित क्रम (ORDER BY क्लॉज में)
- पार्टीशनिंग सपोर्ट:
SUM(Price) OVER (PARTITION BY Category ORDER BY Date) - मानक SQL अनुपालन
- बेहतर ऑप्टिमाइज़र सपोर्ट
उपयोग के मामले
- वित्तीय लेनदेन में रनिंग बैलेंस
- इन्वेंट्री में क्यूमुलेटिव स्टॉक
- बिक्री में क्यूमुलेटिव रेवेन्यू
- प्रगति ट्रैकिंग