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

วิธีนับจำนวนข้อมูลของสองฟิลด์ในคำสั่ง MySQL เดียว

การนับจำนวนข้อมูลแบบเงื่อนไขด้วย 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' มิฉะนั้นคืนค่า 0
  • SUM() จะรวมค่า 1 และ 0 เข้าด้วยกัน ทำให้ได้จำนวนแถวที่ตรงเงื่อนไข
  • สามารถเพิ่มเงื่อนไขได้ไม่จำกัด โดยเพิ่มบรรทัด SUM(CASE WHEN ...) ต่อไป

เทคนิคเพิ่มเติม: ใช้ COUNT() กับเงื่อนไข

ใน MySQL 8.0+ สามารถใช้ COUNT(*) FILTER (WHERE condition) ได้เช่นกัน (รองรับใน PostgreSQL และบางเวอร์ชัน MySQL)