MySQL में उपयोगकर्ता-परिभाषित वेरिएबल (@variable) का उपयोग करके एक कॉलम का रनिंग टोटल (कम्युलेटिव योग) दूसरी कॉलम में गणना करें और स्टोर करें।
उदाहरण: टेबल बनाना और डेटा डालना
mysql> CREATE TABLE DemoTable (
-> Amount INT,
-> SubTotal INT
-> );
Query OK, 0 rows affected (0.65 sec)
mysql> INSERT INTO DemoTable(Amount) VALUES(50), (60), (70), (80);
मौजूदा डेटा देखना (SubTotal NULL है)
mysql> SELECT * FROM DemoTable;
आउटपुट
+--------+----------+ | Amount | SubTotal | +--------+----------+ | 50 | NULL | | 60 | NULL | | 70 | NULL | | 80 | NULL | +--------+----------+ 4 rows in set (0.00 sec)
सबटोटल की गणना और अपडेट करना
mysql> SET @sum := 0; Query OK, 0 rows affected (0.10 sec) mysql> UPDATE DemoTable SET SubTotal = (@sum := @sum + Amount); Query OK, 4 rows affected (0.19 sec) Rows matched: 4 Changed: 4 Warnings: 0
अपडेट के बाद डेटा देखना
mysql> SELECT * FROM DemoTable;
आउटपुट
+--------+----------+ | Amount | SubTotal | +--------+----------+ | 50 | 50 | | 60 | 110 | | 70 | 180 | | 80 | 260 | +--------+----------+ 4 rows in set (0.00 sec)
व्याख्या:
SET @sum := 0वेरिएबल को 0 से आरंभ करता है@sum := @sum + Amountप्रत्येक पंक्ति के लिए वर्तमान योग में Amount जोड़ता है और नया योग निर्दिष्ट करता है- पंक्तियों को टेबल क्रम में संसाधित किया जाता है (क्लस्टर्ड इंडेक्स क्रम या सम्मिलन क्रम)
महत्वपूर्ण: विश्वसनीय क्रम के लिए, ORDER BY के साथ सबक्वेरी का उपयोग करें:
UPDATE DemoTable t
JOIN (
SELECT Id, (@sum := @sum + Amount) AS running_total
FROM DemoTable, (SELECT @sum := 0) vars
ORDER BY Id
) sq ON t.Id = sq.Id
SET t.SubTotal = sq.running_total;
MySQL 8.0+ में विंडो फ़ंक्शन SUM(Amount) OVER (ORDER BY Id) का उपयोग करें।