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

เลือกเฉพาะค่าที่ปรากฏครั้งเดียว (Non-duplicate) ในคอลัมน์ด้วย GROUP BY HAVING COUNT = 1

การคัดกรองเฉพาะค่าที่ไม่ซ้ำ (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)