การนับจำนวนครั้งที่ค่าเฉพาะปรากฏในหลายคอลัมน์รวมกัน
ใช้ SUM(CASE WHEN col = value THEN 1 ELSE 0 END) สำหรับแต่ละคอลัมน์ แล้วนำมาบวกกัน จะได้จำนวนรวมที่ค่านั้นปรากฏในทุกคอลัมน์ที่สนใจ
ตัวอย่างการใช้งาน
สร้างตาราง 3 คอลัมน์ตัวเลข:
mysql> CREATE TABLE countValueMultipleColumnsDemo (
-> Value1 INT, Value2 INT, Value3 INT
-> );
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO countValueMultipleColumnsDemo VALUES(10,15,10), (20,30,10), (40,10,60);
Query OK, 3 rows affected (0.15 sec)
ข้อมูลทั้งหมด:
mysql> SELECT * FROM countValueMultipleColumnsDemo;
+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
| 10 | 15 | 10 |
| 20 | 30 | 10 |
| 40 | 10 | 60 |
+--------+--------+--------+
3 rows in set (0.00 sec)
นับจำนวนรวมของค่า 10 ในทุกคอลัมน์:
mysql> SELECT
-> SUM(CASE WHEN Value1 = 10 THEN 1 ELSE 0 END) +
-> SUM(CASE WHEN Value2 = 10 THEN 1 ELSE 0 END) +
-> SUM(CASE WHEN Value3 = 10 THEN 1 ELSE 0 END) AS TOTAL_COUNT
-> FROM countValueMultipleColumnsDemo;
+-------------+
| TOTAL_COUNT |
+-------------+
| 4 |
+-------------+
1 row in set (0.00 sec)
คำอธิบายการนับ
- Value1=10: แถวที่ 1 → 1 ครั้ง
- Value2=10: แถวที่ 3 → 1 ครั้ง
- Value3=10: แถวที่ 1, 2 → 2 ครั้ง
- รวม = 1 + 1 + 2 = 4
วิธีเขียนสั้นกว่า (MySQL 8.0+)
SELECT
(Value1 = 10) + (Value2 = 10) + (Value3 = 10) AS row_count
FROM countValueMultipleColumnsDemo;
-- คืนค่าต่อแถว แล้วค่อย SUM() รวม
หรือ Unpivot แล้ว Count (มาตรฐานกว่า):
SELECT COUNT(*) FROM (
SELECT Value1 AS val FROM countValueMultipleColumnsDemo
UNION ALL SELECT Value2 FROM countValueMultipleColumnsDemo
UNION ALL SELECT Value3 FROM countValueMultipleColumnsDemo
) AS all_values
WHERE val = 10;
ประยุกต์: นับหลายค่าพร้อมกัน
SELECT
SUM(CASE WHEN Value1 IN (10,20) THEN 1 ELSE 0 END) +
SUM(CASE WHEN Value2 IN (10,20) THEN 1 ELSE 0 END) +
SUM(CASE WHEN Value3 IN (10,20) THEN 1 ELSE 0 END) AS count_10_or_20
FROM countValueMultipleColumnsDemo;
วิธี CASE SUM ยืดหยุ่น สามารถนับเงื่อนไขซับซ้อนได้ ไม่จำกัดแค่เท่ากับค่าคงที่