Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ SUM() ร่วมกับ IF() ใน MySQL นับเงื่อนไข

สามารถใช้ 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

ตัวอย่าง CASE WHEN เทียบเท่า

SELECT 
    SUM(CASE WHEN Value=100 THEN 1 ELSE 0 END + CASE WHEN Value2=100 THEN 1 ELSE 0 END) AS Hundred,
    SUM(CASE WHEN Value=400 THEN 1 ELSE 0 END + CASE WHEN Value2=400 THEN 1 ELSE 0 END) AS FourHundred
FROM DemoTable;

MySQL 8.0+ ใช้ COUNT IF (Simulated)

SELECT 
    COUNT(CASE WHEN Value=100 OR Value2=100 THEN 1 END) AS Hundred,
    COUNT(CASE WHEN Value=400 OR Value2=400 THEN 1 END) AS FourHundred
FROM DemoTable;

COUNT(expr) นับเฉพาะ Non-NULL → CASE ไม่มี ELSE จะคืน NULL เมื่อ False

ประยุกต์: Pivot Table / Crosstab

SELECT 
    SUM(IF(status='pending', 1, 0)) AS pending,
    SUM(IF(status='approved', 1, 0)) AS approved,
    SUM(IF(status='rejected', 1, 0)) AS rejected,
    COUNT(*) AS total
FROM orders;
รูปแบบSyntaxเหมาะสำหรับ
IFIF(condition, true_val, false_val)เงื่อนไขเดียว 2 ทางเลือก
CASE WHENCASE WHEN cond THEN val ... ELSE val ENDหลายเงื่อนไข / Complex Logic