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

MySQL ใช้ DISTINCT แทน GROUP BY เพื่อลบแถวซ้ำ (Duplicate Rows)

ใช้ DISTINCT ในคำสั่ง SELECT เพื่อลบแถวซ้ำทั้งแถว (ทั้งคอลัมน์ที่ SELECT) ได้โดยไม่ต้องใช้ GROUP BY

ตัวอย่างการใช้งาน

1. สร้างตาราง

mysql> CREATE TABLE DemoTable1801 (
    Name VARCHAR(20),
    Score INT
);
Query OK, 0 rows affected (0.00 sec)

2. เพิ่มข้อมูล (มีแถวซ้ำทั้งคู่)

mysql> INSERT INTO DemoTable1801 VALUES('John', 98);
mysql> INSERT INTO DemoTable1801 VALUES('John', 98);  -- ซ้ำทั้ง Name และ Score
mysql> INSERT INTO DemoTable1801 VALUES('John', 99);  -- Name ซ้ำ Score ต่าง
mysql> INSERT INTO DemoTable1801 VALUES('Carol', 99);

3. แสดงข้อมูลเดิม (มีแถวซ้ำ)

mysql> SELECT * FROM DemoTable1801;
+-------+-------+
| Name  | Score |
+-------+-------+
| John  |    98 |
| John  |    98 |  -- Duplicate Row
| John  |    99 |
| Carol |    99 |
+-------+-------+

4. ใช้ DISTINCT ลบแถวซ้ำทั้งแถว

mysql> SELECT DISTINCT Name, Score FROM DemoTable1801;

5. ผลลัพธ์ (เหลือ 3 แถว)

+-------+-------+
| Name  | Score |
+-------+-------+
| John  |    98 |
| John  |    99 |
| Carol |    99 |
+-------+-------+

DISTINCT vs GROUP BY

คุณสมบัติDISTINCTGROUP BY
วัตถุประสงค์ลบแถวซ้ำทั้งแถวจัดกลุ่มเพื่อ Aggregate
SyntaxSELECT DISTINCT col1, col2SELECT col1, col2 FROM ... GROUP BY col1, col2
Performanceเหมือนกัน (MySQL Optimize ให้เหมือนกัน)เหมือนกัน
ใช้กับ Aggregate❌ ไม่ได้✅ ได้ (SUM, COUNT ฯลฯ)
ORDER BYต้องระบุคอลัมน์ใน SELECTยืดหยุ่นกว่า

⚠️ ข้อควรระวัง

  • DISTINCT ใช้ทรัพยากร (Memory/Temp Table) สำหรับการ Sort/Unique ควรใช้เฉพาะที่จำเป็น
  • SELECT DISTINCT * ตรวจสอบทุกคอลัมน์ ใช้ Index ได้ยาก
  • หากต้องการนับจำนวนแถวซ้ำ ใช้ GROUP BY ... COUNT(*) แทน

สรุป

SELECT DISTINCT col1, col2 ลบแถวที่ซ้ำทุกคอลัมน์ที่ SELECT ได้ใน 1 คำสั่ง เรียบง่ายกว่า GROUP BY เมื่อไม่ต้องการ Aggregate Function ใช้ Index ได้หาก SELECT คอลัมน์ที่มี Index