MySQL-এ কোনো ফিল্ডের ভ্যালুর উপর ভিত্তি করে ভিন্ন ভিন্ন কলামের যোগফল বের করতে SUM() এবং CASE স্টেটমেন্ট একসাথে ব্যবহার করা হয়।
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Price INT,
-> isValidCustomer BOOLEAN,
-> FinalPrice INT
-> );
mysql> INSERT INTO DemoTable(Price, isValidCustomer, FinalPrice) VALUES(20, FALSE, 40);
mysql> INSERT INTO DemoTable(Price, isValidCustomer, FinalPrice) VALUES(45, TRUE, 10);
mysql> INSERT INTO DemoTable(Price, isValidCustomer, FinalPrice) VALUES(89, TRUE, 50);
mysql> INSERT INTO DemoTable(Price, isValidCustomer, FinalPrice) VALUES(200, FALSE, 100);
সব রেকর্ড দেখুন
mysql> SELECT * FROM DemoTable;
+----+-------+-----------------+------------+
| Id | Price | isValidCustomer | FinalPrice |
+----+-------+-----------------+------------+
| 1 | 20 | 0 | 40 |
| 2 | 45 | 1 | 10 |
| 3 | 89 | 1 | 50 |
| 4 | 200 | 0 | 100 |
+----+-------+-----------------+------------+
শর্তসাপেক্ষে সমষ্টি: isValidCustomer=true হলে Price, false হলে FinalPrice
mysql> SELECT SUM(
-> CASE WHEN isValidCustomer = TRUE THEN Price ELSE FinalPrice END
-> ) AS TotalPrice FROM DemoTable;
ফলাফল
+------------+
| TotalPrice |
+------------+
| 274 |
+------------+
গণনা:
- Id=1: isValidCustomer=FALSE → FinalPrice=40
- Id=2: isValidCustomer=TRUE → Price=45
- Id=3: isValidCustomer=TRUE → Price=89
- Id=4: isValidCustomer=FALSE → FinalPrice=100
- মোট: 40 + 45 + 89 + 100 = 274
আরও জটিল উদাহরণ
SELECT
SUM(CASE WHEN status = 'paid' THEN amount ELSE 0 END) AS paid_total,
SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) AS pending_total,
SUM(CASE WHEN status = 'cancelled' THEN amount ELSE 0 END) AS cancelled_total
FROM orders;
এই পদ্ধতিতে একই কোয়েরিতে একাধিক কন্ডিশনাল সমষ্টি বের করা যায়।