การนับเงื่อนไขหลายอย่างในคอลัมน์ต่างกันด้วย SUM(IF())
เพื่อนับจำนวนแถวที่ตรงเงื่อนไขต่างๆ ในคอลัมน์ต่างกันพร้อมกันในคำสั่ง SELECT เดียว เราใช้ SUM(IF(condition, 1, 0)) สำหรับแต่ละเงื่อนไข
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (FirstName VARCHAR(100), LastName VARCHAR(100));
Query OK, 0 rows affected (2.80 sec)
mysql> INSERT INTO DemoTable VALUES('Adam','Smith');
mysql> INSERT INTO DemoTable VALUES('John','Smith');
mysql> INSERT INTO DemoTable VALUES('John','Doe');
mysql> INSERT INTO DemoTable VALUES('Bob','Doe');
mysql> INSERT INTO DemoTable VALUES('Sam','Smith');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| Adam | Smith |
| John | Smith |
| John | Doe |
| Bob | Doe |
| Sam | Smith |
+-----------+----------+
5 rows in set (0.00 sec)
คำสั่งนับ John ใน FirstName และ Smith ใน LastName พร้อมกัน
mysql> SELECT
SUM(IF(FirstName = 'John', 1, 0)) AS John_Count,
SUM(IF(LastName = 'Smith', 1, 0)) AS Smith_Count
FROM DemoTable;
ผลลัพธ์:
+------------+-------------+
| John_Count | Smith_Count |
+------------+-------------+
| 2 | 3 |
+------------+-------------+
1 row in set (0.00 sec)
คำอธิบาย
IF(FirstName = 'John', 1, 0): คืน 1 ถ้า FirstName เป็น John, ไม่ใช่คืน 0SUM(...): รวมค่า 1/0 → ได้จำนวนแถวที่ตรงเงื่อนไข- John_Count = 2 (แถวที่ 2 และ 3)
- Smith_Count = 3 (แถวที่ 1, 2, 5)
- วิธีนี้ยืดหยุ่นกว่า COUNT(CASE ...) และทำงานได้ใน MySQL ทุกเวอร์ชัน