การคัดกรองเฉพาะค่าที่ไม่ซ้ำ (Unique Values) ในคอลัมน์
ใช้ GROUP BY รวมค่าเหมือนกัน แล้ว HAVING COUNT(*) = 1 เพื่อกรองเฉพาะกลุ่มที่มี 1 แถวเท่านั้น
Syntax
SELECT column_name FROM table_name GROUP BY column_name HAVING COUNT(*) = 1;
ตัวอย่างการใช้งาน
สร้างตารางมีค่าซ้ำและไม่ซ้ำ:
mysql> CREATE TABLE DemoTable723 (Value INT);
Query OK, 0 rows affected (0.58 sec)
mysql> INSERT INTO DemoTable723 VALUES
(100), (200), (200), (100), (300), (400), (400), (600), (400), (200);
Query OK, 10 rows affected
ข้อมูลทั้งหมด:
mysql> SELECT * FROM DemoTable723;
+-------+ | Value | +-------+ | 100 | | 200 | | 200 | | 100 | | 300 | | 400 | | 400 | | 600 | | 400 | | 200 | +-------+ 10 rows in set (0.00 sec)
เลือกเฉพาะค่าที่ปรากฏ **ครั้งเดียวเท่านั้น** (Non-duplicate):
mysql> SELECT * FROM DemoTable723 GROUP BY Value HAVING COUNT(Value) = 1;
+-------+ | Value | +-------+ | 300 | | 600 | +-------+ 2 rows in set (0.00 sec)
อธิบาย: 100 (2 ครั้ง), 200 (3 ครั้ง), 400 (3 ครั้ง) ถูกตัดออก เหลือ 300 และ 600
การขยาย: แสดงจำนวนครั้งด้วย
SELECT Value, COUNT(*) AS frequency FROM DemoTable723 GROUP BY Value HAVING COUNT(*) = 1;
กรณีใช้งานจริง
- หา ID ที่ไม่ซ้ำสำหรับ Insert ใหม่
- ตรวจสอบ Data Quality (ค่าที่ควร Unique แต่ซ้ำ)
- หาค่า Outlier หรือ Anomaly
- Deduplication เบื้องต้น
ประสิทธิภาพ
- ต้องมี Index บนคอลัมน์ที่ GROUP BY
- สำหรับตารางใหญ่ ใช้ Window Function (MySQL 8.0+):
ROW_NUMBER() OVER (PARTITION BY col ORDER BY id)