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

MySQL: นับแถวที่มีค่าที่ระบุปรากฏ 2 คอลัมน์ขึ้นไป

การนับแถวที่มีค่าเฉพาะปรากฏในหลายคอลัมน์พร้อมกัน

ใช้เงื่อนไข 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) อ่านง่ายและทำงานดีสำหรับจำนวนคอลัมน์คงที่และไม่มาก