การนับจำนวนข้อมูลแบบเงื่อนไขด้วย CASE WHEN และ SUM()
เมื่อต้องการนับจำนวนแถวที่ตรงตามเงื่อนไขต่างๆ ในคอลัมน์เดียวกัน ให้ใช้คำสั่ง CASE WHEN ร่วมกับฟังก์ชัน SUM() วิธีนี้มีประสิทธิภาพกว่าการเขียนคำสั่ง SELECT หลายครั้ง
ตัวอย่าง: นับจำนวนพนักงานชายและหญิง
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (
EmployeeGender ENUM('Male', 'Female')
);
INSERT INTO DemoTable VALUES ('Male');
INSERT INTO DemoTable VALUES ('Female');
INSERT INTO DemoTable VALUES ('Male');
INSERT INTO DemoTable VALUES ('Female');
INSERT INTO DemoTable VALUES ('Male');
INSERT INTO DemoTable VALUES ('Female');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+----------------+
| EmployeeGender |
+----------------+
| Male |
| Female |
| Male |
| Female |
| Male |
| Female |
+----------------+
3. คำสั่งนับจำนวนแยกตามเพศในคำสั่งเดียว
SELECT
SUM(CASE WHEN EmployeeGender = 'Male' THEN 1 ELSE 0 END) AS Total_Male,
SUM(CASE WHEN EmployeeGender = 'Female' THEN 1 ELSE 0 END) AS Total_Female
FROM DemoTable;
ผลลัพธ์:
+------------+--------------+
| Total_Male | Total_Female |
+------------+--------------+
| 3 | 3 |
+------------+--------------+
อธิบายการทำงาน
CASE WHEN EmployeeGender = 'Male' THEN 1 ELSE 0 ENDจะคืนค่า 1 ถ้าเป็น 'Male' มิฉะนั้นคืนค่า 0SUM()จะรวมค่า 1 และ 0 เข้าด้วยกัน ทำให้ได้จำนวนแถวที่ตรงเงื่อนไข- สามารถเพิ่มเงื่อนไขได้ไม่จำกัด โดยเพิ่มบรรทัด
SUM(CASE WHEN ...)ต่อไป
เทคนิคเพิ่มเติม: ใช้ COUNT() กับเงื่อนไข
ใน MySQL 8.0+ สามารถใช้ COUNT(*) FILTER (WHERE condition) ได้เช่นกัน (รองรับใน PostgreSQL และบางเวอร์ชัน MySQL)