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

การนับค่า Yes/No ใน MySQL ด้วย SUM และ CASE

เมื่อต้องการนับจำนวนค่าเฉพาะ (เช่น Yes/No) ในคอลัมน์ ENUM หรือ VARCHAR ที่มีค่าซ้ำกันในหลายแถว สามารถใช้ SUM() ร่วมกับเงื่อนไขแบบ Boolean ได้ โดย MySQL จะแปลง TRUE เป็น 1 และ FALSE เป็น 0 อัตโนมัติ

ตัวอย่างการใช้งาน

สร้างตารางสถานะสมรส:

mysql> CREATE TABLE DemoTable1430 (
    -> EmployeeId INT,
    -> isMarried ENUM('YES', 'NO')
    -> );

เพิ่มข้อมูล (EmployeeId 1001 มี 4 ระเบียน):

mysql> INSERT INTO DemoTable1430 VALUES (1001, 'Yes');
mysql> INSERT INTO DemoTable1430 VALUES (1001, 'No');
mysql> INSERT INTO DemoTable1430 VALUES (1001, 'Yes');
mysql> INSERT INTO DemoTable1430 VALUES (1001, 'Yes');

ดูข้อมูล:

mysql> SELECT * FROM DemoTable1430;
+------------+-----------+
| EmployeeId | isMarried |
+------------+-----------+
|       1001 | YES       |
|       1001 | NO        |
|       1001 | YES       |
|       1001 | YES       |
+------------+-----------+

นับจำนวน Yes และ No แยกตาม EmployeeId:

mysql> SELECT EmployeeId,
    -> SUM(isMarried = 'Yes') AS NumberOfMarried,
    -> SUM(isMarried = 'No') AS NumberOfUnMarried
    -> FROM DemoTable1430
    -> GROUP BY EmployeeId;

ผลลัพธ์:

+------------+-----------------+-------------------+
| EmployeeId | NumberOfMarried | NumberOfUnMarried |
+------------+-----------------+-------------------+
|       1001 |               3 |                 1 |
+------------+-----------------+-------------------+

หลักการทำงาน

  • isMarried = 'Yes' คืนค่า 1 (TRUE) หรือ 0 (FALSE)
  • SUM() รวมค่า 1/0 เข้าด้วยกัน = จำนวนครั้งที่เป็นจริง
  • GROUP BY แยกนับตาม EmployeeId

วิธีทางเลือก: ใช้ CASE WHEN

SELECT EmployeeId,
    SUM(CASE WHEN isMarried = 'Yes' THEN 1 ELSE 0 END) AS NumberOfMarried,
    SUM(CASE WHEN isMarried = 'No' THEN 1 ELSE 0 END) AS NumberOfUnMarried
FROM DemoTable1430
GROUP BY EmployeeId;

ทั้งสองวิธีให้ผลลัพธ์เหมือนกัน วิธีแรกสั้นกว่า วิธีที่สองอ่านง่ายกว่าและยืดหยุ่นกว่า (รองรับเงื่อนไขซับซ้อน)

การประยุกต์ใช้

  • นับสถานะออเดอร์: Pending, Shipped, Delivered, Cancelled
  • สถิติการเข้าชม: Unique vs Returning visitors
  • ผลสอบ: Pass/Fail ตามเกณฑ์
  • แบบสำรวจ: Agree/Neutral/Disagree