MySQL में यूज़र-डिफ़ाइन्ड वेरिएबल (@var) का उपयोग करके पिछली पंक्ति के मान के आधार पर वर्तमान पंक्ति के लिए चल योग (क्यूमुलेटिव सम) या अन्य व्युत्पन्न मान की गणना कर सकते हैं।
टेबल बनाएं
mysql> CREATE TABLE DemoTable1868 (Value INT);
डेटा डालें
mysql> INSERT INTO DemoTable1868 VALUES(10), (20), (30), (40);
चल योग (क्यूमुलेटिव सम) गणना करें
mysql> SELECT Value,
(@running := Value + @running) AS SecondColumn
FROM DemoTable1868, (SELECT @running := 0) AS init;
आउटपुट:
+-------+--------------+ | Value | SecondColumn | +-------+--------------+ | 10 | 10 | | 20 | 30 | | 30 | 60 | | 40 | 100 | +-------+--------------+
व्याख्या
(SELECT @running := 0) AS init→ वेरिएबल को 0 से प्रारंभ करता है (क्रॉस जॉइन से प्रत्येक पंक्ति के लिए एक बार)।@running := Value + @running→ वर्तमान मान + पिछला योग = नया योग, वेरिएबल में असाइन।- परिणाम कॉलम में वही मान दिखता है।
महत्वपूर्ण चेतावनी
- यूज़र वेरिएबल में असाइनमेंट का क्रम **गारंटी नहीं** है (विशेषकर जटिल क्वेरी, जॉइन, ऑप्टिमाइज़र पुनर्क्रमण में)।
- MySQL 8.0+ में विंडो फ़ंक्शन उपयोग करें (विश्वसनीय, मानक):
आधुनिक तरीका (MySQL 8.0+)
SELECT Value,
SUM(Value) OVER (ORDER BY Id ROWS UNBOUNDED PRECEDING) AS RunningTotal
FROM DemoTable1868;
अन्य उपयोग
- पंक्ति संख्या:
@row := @row + 1 - पिछली पंक्ति मान:
@prev := current_col - समूहवार गणना: वेरिएबल रीसेट के लिए
CASE WHEN group_changed THEN @var := 0 ELSE @var := @var + val END