สามารถใช้ SUM() ร่วมกับ IF() เพื่อนับจำนวนแถวที่ตรงตามเงื่อนไขได้ โดย IF คืนค่า 1 เมื่อตรงเงื่อนไข 0 เมื่อไม่ตรง แล้ว SUM รวมกัน
สร้างตารางและข้อมูล
mysql> create table DemoTable (Value int, Value2 int);
mysql> insert into DemoTable values(100,400),(100,400),(400,100);
ข้อมูลในตาราง
+-------+--------+ | Value | Value2 | +-------+--------+ | 100 | 400 | | 100 | 400 | | 400 | 100 | +-------+--------+
คำสั่ง: นับจำนวน 100 และ 400 ในทั้ง 2 คอลัมน์
mysql> SELECT
SUM(IF(Value=100, 1, 0) + IF(Value2=100, 1, 0)) AS Hundred,
SUM(IF(Value=400, 1, 0) + IF(Value2=400, 1, 0)) AS FourHundred
FROM DemoTable;
ผลลัพธ์
+---------+--------------+ | Hundred | FourHundred | +---------+--------------+ | 3 | 3 | +---------+--------------+
คำอธิบาย
- แถว 1: Value=100 (+1), Value2=400 (+1) → Hundred=1, FourHundred=1
- แถว 2: Value=100 (+1), Value2=400 (+1) → Hundred=2, FourHundred=2
- แถว 3: Value=400 (+1), Value2=100 (+1) → Hundred=3, FourHundred=3
IF() vs CASE WHEN
| รูปแบบ | Syntax | เหมาะสำหรับ |
|---|---|---|
| IF | IF(condition, true_val, false_val) | เงื่อนไขเดียว 2 ทางเลือก |
| CASE WHEN | CASE WHEN cond THEN val ... ELSE val END | หลายเงื่อนไข / Complex Logic |