WHERE क्लॉज के साथ कंडीशनल SUM
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
CustomerId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ProductAmount INT,
CustomerCountryName VARCHAR(10)
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable (ProductAmount, CustomerCountryName) VALUES (190, 'US'); mysql> INSERT INTO DemoTable (ProductAmount, CustomerCountryName) VALUES (200, 'UK'); mysql> INSERT INTO DemoTable (ProductAmount, CustomerCountryName) VALUES (1500, 'AUS'); mysql> INSERT INTO DemoTable (ProductAmount, CustomerCountryName) VALUES (2010, 'US'); mysql> INSERT INTO DemoTable (ProductAmount, CustomerCountryName) VALUES (7890, 'UK'); mysql> INSERT INTO DemoTable (ProductAmount, CustomerCountryName) VALUES (500, 'US');
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+------------+---------------+---------------------+ | CustomerId | ProductAmount | CustomerCountryName | +------------+---------------+---------------------+ | 1 | 190 | US | | 2 | 200 | UK | | 3 | 1500 | AUS | | 4 | 2010 | US | | 5 | 7890 | UK | | 6 | 500 | US | +------------+---------------+---------------------+
देश "US" के ग्राहकों के लिए ProductAmount का योग निकालने के लिए क्वेरी:
mysql> SELECT SUM(ProductAmount) AS Total_Amount
FROM DemoTable
WHERE CustomerCountryName = 'US';
आउटपुट:
+--------------+ | Total_Amount | +--------------+ | 2700 | +--------------+
व्याख्या: WHERE क्लॉज केवल उन्हीं पंक्तियों को फ़िल्टर करता है जहां CustomerCountryName 'US' है (रो 1, 4, 6), फिर SUM() केवल उन्हीं पंक्तियों के ProductAmount को जोड़ता है: 190 + 2010 + 500 = 2700।
वैकल्पिक तरीका - CASE के साथ SUM:
SELECT SUM(CASE WHEN CustomerCountryName = 'US' THEN ProductAmount ELSE 0 END) AS Total_Amount FROM DemoTable;
यह तरीका उपयोगी होता है जब आपको एक ही क्वेरी में कई शर्तों के लिए अलग-अलग योग निकालने हों।