การนับแถวที่มีค่าเฉพาะปรากฏในหลายคอลัมน์พร้อมกัน
ใช้เงื่อนไข value IN (col1, col2, col3) ตรวจสอบว่าค่าที่ต้องการปรากฏในคอลัมน์ไหนก็ได้ของแถวนั้น แล้วรวมเงื่อนไขด้วย AND เพื่อให้ต้องมีทั้งสองค่า
ตัวอย่างการใช้งาน
สร้างตาราง 3 คอลัมน์ตัวเลข:
mysql> CREATE TABLE specifiedValuesDemo (
-> Value INT, Value2 INT, Value3 INT
-> );
Query OK, 0 rows affected (0.60 sec)
mysql> INSERT INTO specifiedValuesDemo VALUES(10,15,20), (40,10,20), (80,20,1000);
Query OK, 3 rows affected (0.12 sec)
ข้อมูลทั้งหมด:
mysql> SELECT * FROM specifiedValuesDemo;
+-------+--------+--------+
| Value | Value2 | Value3 |
+-------+--------+--------+
| 10 | 15 | 20 |
| 40 | 10 | 20 |
| 80 | 20 | 1000 |
+-------+--------+--------+
3 rows in set (0.00 sec)
นับแถวที่มี ทั้ง 10 และ 20 ในคอลัมน์ใดก็ได้ของแถวนั้น:
mysql> SELECT COUNT(*) FROM specifiedValuesDemo
-> WHERE 10 IN (Value, Value2, Value3)
-> AND 20 IN (Value, Value2, Value3);
+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
คำอธิบาย
- แถวที่ 1: มี 10 (Value) และ 20 (Value3) → นับ
- แถวที่ 2: มี 10 (Value2) และ 20 (Value3) → นับ
- แถวที่ 3: มี 20 (Value2) แต่ไม่มี 10 → ไม่นับ
ประยุกต์ใช้: นับแถวที่มีค่าใดค่าหนึ่งจากชุด (OR)
-- นับแถวที่มี 10 หรือ 20 (อย่างน้อย 1 ค่า)
SELECT COUNT(*) FROM specifiedValuesDemo
WHERE 10 IN (Value, Value2, Value3) OR 20 IN (Value, Value2, Value3);
ประยุกต์ใช้: Dynamic List (จาก Subquery/Application)
-- สมมติมีตาราง target_values(val INT) เก็บค่าที่ต้องการหา
SELECT COUNT(*) FROM specifiedValuesDemo d
WHERE EXISTS (
SELECT 1 FROM target_values v
WHERE v.val IN (d.Value, d.Value2, d.Value3)
HAVING COUNT(*) >= 2 -- ต้องมีอย่างน้อย 2 ค่าจาก target_values
);
วิธี IN (col1, col2, col3) อ่านง่ายและทำงานดีสำหรับจำนวนคอลัมน์คงที่และไม่มาก