ใช้ 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' → ได้จำนวน 2Score=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)