Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में सेसन वेरिएबल से कॉलम मान को पिछले मान के साथ जोड़ना

सेसन वेरिएबल का उपयोग करके रनिंग टोटल

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 अनुपालन
  • बेहतर ऑप्टिमाइज़र सपोर्ट

उपयोग के मामले

  • वित्तीय लेनदेन में रनिंग बैलेंस
  • इन्वेंट्री में क्यूमुलेटिव स्टॉक
  • बिक्री में क्यूमुलेटिव रेवेन्यू
  • प्रगति ट्रैकिंग
  1. - MySQL में शर्त के साथ कॉलम का योग प्राप्त करना

    अंकगणितीय ऑपरेटर के साथ GROUP BY से श्रेणीवार योग DIV (पूर्णांक विभाजन) ऑपरेटर का उपयोग करके आईडी रेंज के आधार पर समूह बनाकर योग निकाला जा सकता है। तालिका और डेटा (125, 2100), (128, 2900); क्वेरी: ProductId DIV 10 द्वारा समूह योग GROUP BY ProductId DIV 10; परिणाम +------------------+---------

  1. - MySQL में ग्रुपिंग के साथ सेलेक्ट और सम?

    सम करने के लिए एग्रीगेट फंक्शन SUM() का उपयोग करें। इसके साथ MySQL GROUP BY का उपयोग करके ग्रुप करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> ProductName varchar(20), -> ProductQuantity int, -> ProductPrice int -> ); Query OK, 0 rows affected (0.63 sec) इ

  1. - MySQL में मान 0 होने पर दूसरे कॉलम का मान कैसे चुनें?

    IF() फ़ंक्शन का उपयोग यदि किसी कॉलम का मान 0 है तो दूसरे कॉलम का मान लेने के लिए IF() फ़ंक्शन प्रयोग करें: select IF(yourColumnName1=0, yourColumnName2, yourColumnName1) as anyAliasName from yourTableName; टेबल बनाना और डेटा डालना insert into demo30(value,original_value) values(30,0); डेटा देखना