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

นับค่า Boolean (true/false) ในคอลัมน์เดียวด้วย Single Query ใน MySQL


แนวคิด

MySQL ใช้ TINYINT(1) แทน Boolean (0 = false, 1 = true) ใช้ SUM() กับเงื่อนไข เพื่อนับจำนวน true/false ใน query เดียว

หลักการ

  • SUM(isPassed = 1) → นับจำนวน true (เงื่อนไขเป็นจริง = 1)
  • SUM(isPassed = 0) → นับจำนวน false (เงื่อนไขเป็นเท็จ = 0)

ตัวอย่างครบถ้วน

1. สร้างตารางนักเรียน

mysql> create table countBooleanFieldDemo 
    -> ( 
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> StudentFirstName varchar(20), 
    -> isPassed tinyint(1) 
    -> ); 
Query OK, 0 rows affected (0.63 sec)

2. เพิ่มข้อมูล (ผสม true/false)

mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Larry',0); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Mike',1); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Sam',0); 
Query OK, 1 row affected (0.21 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Carol',1); 
Query OK, 1 row affected (0.15 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Bob',1); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('David',1); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Ramit',0); 
Query OK, 1 row affected (0.28 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Chris',1); 
Query OK, 1 row affected (0.20 sec)
mysql> insert into countBooleanFieldDemo(StudentFirstName,isPassed) values('Robert',1); 
Query OK, 1 row affected (0.16 sec)

3. ดูข้อมูลทั้งหมด

mysql> select * from countBooleanFieldDemo;
+-----------+------------------+----------+
| StudentId | StudentFirstName | isPassed |
+-----------+------------------+----------+
| 1         | Larry            | 0        |
| 2         | Mike             | 1        |
| 3         | Sam              | 0        |
| 4         | Carol            | 1        |
| 5         | Bob              | 1        |
| 6         | David            | 1        |
| 7         | Ramit            | 0        |
| 8         | Chris            | 1        |
| 9         | Robert           | 1        |
+-----------+------------------+----------+

4. Query นับ true/false และคำนวณเปอร์เซ็นต์

mysql> select 
    -> sum(isPassed = 1) as `True`, 
    -> sum(isPassed = 0) as `False`, 
    -> (case when sum(isPassed = 1) > 0 then sum(isPassed = 0) / sum(isPassed = 1) end) As TotalPercentage 
    -> from countBooleanFieldDemo;
+------+-------+-----------------+
| True | False | TotalPercentage |
+------+-------+-----------------+
| 6    | 3     | 0.5000          |
+------+-------+-----------------+

วิธีอื่น: ใช้ COUNT กับ IF

SELECT 
  COUNT(IF(isPassed = 1, 1, NULL)) AS `True`,
  COUNT(IF(isPassed = 0, 1, NULL)) AS `False`
FROM countBooleanFieldDemo;

ขยาย: นับตามกลุ่ม (GROUP BY)

SELECT 
  class_id,
  SUM(isPassed = 1) AS passed,
  SUM(isPassed = 0) AS failed,
  COUNT(*) AS total
FROM students
GROUP BY class_id;

สรุป: ใช้ SUM(condition) นับ boolean ได้ใน query เดียว เร็วและอ่านง่าย