สร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable1988 ( Value1 int, Value2 int, Price int );
mysql> insert into DemoTable1988 values(10,7,500); mysql> insert into DemoTable1988 values(7,9,400); mysql> insert into DemoTable1988 values(8,7,200); mysql> insert into DemoTable1988 values(7,4,300);
ข้อมูลในตาราง
+--------+--------+-------+ | Value1 | Value2 | Price | +--------+--------+-------+ | 10 | 7 | 500 | | 7 | 9 | 400 | | 8 | 7 | 200 | | 7 | 4 | 300 | +--------+--------+-------+
Query ใช้ CASE WHEN แทน WHERE แบบแยกคอลัมน์
คำนวณ: ผลรวม Price ที่ Value2=7 ลบด้วย ผลรวม Price ที่ Value1=7
mysql> select sum(case when Value2=7 then Price else 0 end) - sum(case when Value1=7 then Price else 0 end) as Result from DemoTable1988;
ผลลัพธ์
+--------+ | Result | +--------+ | 0 | +--------+
การคำนวณ
SUM(CASE WHEN Value2=7 THEN Price ELSE 0 END)→ แถวที่ 1 (500) + แถวที่ 3 (200) = 700SUM(CASE WHEN Value1=7 THEN Price ELSE 0 END)→ แถวที่ 2 (400) + แถวที่ 4 (300) = 700- Result = 700 - 700 = 0
ประโยชน์ของเทคนิคนี้
- คำนวณเงื่อนไขหลายแบบใน Query เดียว (Conditional Aggregation)
- หลีกเลี่ยงการเขียน Subquery หลายตัวหรือ UNION หลายตัว
- เหมาะสำหรับรายงาน (Report) ที่ต้องการสรุปข้อมูลหลายมุมมองพร้อมกัน
ตัวอย่างขยาย: รายงานสรุปหลายเงื่อนไข
SELECT
SUM(CASE WHEN Value1 > 5 THEN Price ELSE 0 END) AS sum_val1_gt_5,
SUM(CASE WHEN Value2 < 8 THEN Price ELSE 0 END) AS sum_val2_lt_8,
COUNT(CASE WHEN Price >= 400 THEN 1 END) AS cnt_price_ge_400
FROM DemoTable1988;