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

MySQL นับหลายเงื่อนไขใน Query เดียวด้วย SUM(condition)

ใช้ SUM(condition) โดยที่ condition เป็นนิพจน์ Boolean (TRUE=1, FALSE=0) เพื่อนับจำนวนแถวที่ตรงเงื่อนไขหลายเงื่อนไขพร้อมกันใน Query เดียว

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

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1790 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(20),
    Score INT
);
Query OK, 0 rows affected (0.94 sec)

2. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable1790(Name, Score) VALUES('Chris', 45);
mysql> INSERT INTO DemoTable1790(Name, Score) VALUES('David', 55);
mysql> INSERT INTO DemoTable1790(Name, Score) VALUES('David', 98);
mysql> INSERT INTO DemoTable1790(Name, Score) VALUES('Chris', 91);
mysql> INSERT INTO DemoTable1790(Name, Score) VALUES('Mike', 99);
mysql> INSERT INTO DemoTable1790(Name, Score) VALUES('Carol', 55);

3. แสดงข้อมูล

mysql> SELECT * FROM DemoTable1790;
+----+-------+-------+
| Id | Name  | Score |
+----+-------+-------+
|  1 | Chris |    45 |
|  2 | David |    55 |
|  3 | David |    98 |
|  4 | Chris |    91 |
|  5 | Mike  |    99 |
|  6 | Carol |    55 |
+----+-------+-------+

4. Query: นับชื่อ 'Chris' และ นับ Score=55 พร้อมกัน

mysql> SELECT SUM(Name='Chris'), SUM(Score=55) FROM DemoTable1790;

5. ผลลัพธ์

+-------------------+---------------+
| SUM(Name='Chris') | SUM(Score=55) |
+-------------------+---------------+
|                 2 |             2 |
+-------------------+---------------+

คำอธิบาย

  • Name='Chris' : นิพจน์ Boolean คืนค่า 1 (TRUE) หรือ 0 (FALSE)
  • SUM(Name='Chris') : บวก 1 ทุกครั้งที่ Name='Chris' → ได้จำนวน 2
  • Score=55 : เหมือนกัน คืน 1 ถ้า Score=55 (David และ Carol) → ได้ 2

ขยาย: นับหลายเงื่อนไขพร้อม GROUP BY

SELECT 
    Name,
    SUM(Score > 90) AS HighScore,
    SUM(Score BETWEEN 50 AND 90) AS MidScore,
    SUM(Score < 50) AS LowScore,
    COUNT(*) AS Total
FROM DemoTable1790
GROUP BY Name;

ผลลัพธ์

+-------+-----------+----------+---------+-------+
| Name  | HighScore | MidScore | LowScore| Total |
+-------+-----------+----------+---------+-------+
| Chris |         1 |        1 |       0 |     2 |
| David |         1 |        1 |       0 |     2 |
| Mike  |         1 |        0 |       0 |     1 |
| Carol |         0 |        1 |       0 |     1 |
+-------+-----------+----------+---------+-------+

สรุป

SUM(boolean_expression) เป็นเทคนิค Conditional Counting ที่มีประสิทธิภาพ สามารถนับหลายเงื่อนไขใน Query เดียวได้ ไม่ต้องเขียน Subquery หรือ UNION หลายตัว ใช้ได้กับ MySQL, PostgreSQL, SQLite (TRUE=1, FALSE=0)