การรวม/ลบตามเงื่อนไขด้วย CASE WHEN
ใช้ CASE WHEN condition THEN value ELSE other END ภายใน SUM() เพื่อบวกหรือลบตามสถานะ
ตัวอย่าง: ACTIVE = บวก, INACTIVE = ลบ
mysql> create table DemoTable866(
Status varchar(100),
Amount int );
Query OK, 0 rows affected (0.63 sec)
mysql> insert into DemoTable866 values('ACTIVE', 50);
mysql> insert into DemoTable866 values('INACTIVE', 70);
mysql> insert into DemoTable866 values('INACTIVE', 20);
mysql> insert into DemoTable866 values('ACTIVE', 100);
mysql> insert into DemoTable866 values('ACTIVE', 200);
คำสั่ง SUM แบบมีเงื่อนไข
mysql> select sum(
CASE WHEN Status = 'ACTIVE' THEN Amount
WHEN Status = 'INACTIVE' THEN -Amount
END
) as RemainingAmount from DemoTable866;
ผลลัพธ์: 50 - 70 - 20 + 100 + 200 = 260
+-----------------+
| RemainingAmount |
+-----------------+
| 260 |
+-----------------+
รูปแบบ CASE WHEN
-- Simple CASE
CASE column WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END
-- Searched CASE (ใช้ได้กว้างขึ้น)
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END
การใช้งานอื่นๆ
-- นับจำนวนตามเงื่อนไข
SELECT SUM(CASE WHEN Status = 'ACTIVE' THEN 1 ELSE 0 END) as active_count FROM DemoTable866;
-- แยกคอลัมน์
SELECT
SUM(CASE WHEN Status = 'ACTIVE' THEN Amount ELSE 0 END) as total_active,
SUM(CASE WHEN Status = 'INACTIVE' THEN Amount ELSE 0 END) as total_inactive
FROM DemoTable866;
MySQL 8.0+: FILTER Clause (ไม่รองรับโดยตรง แต่ใช้ CASE ได้)
PostgreSQL มี SUM(amount) FILTER (WHERE status = 'ACTIVE') MySQL ใช้ CASE WHEN แทน
สรุป
ใช้ SUM(CASE WHEN condition THEN value ELSE -value END) คำนวณสุทธิ บวก/ลบ ตามเงื่อนไขในคิวรี่เดียว