ใช้ 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
| คุณสมบัติ | DISTINCT | GROUP BY |
|---|---|---|
| วัตถุประสงค์ | ลบแถวซ้ำทั้งแถว | จัดกลุ่มเพื่อ Aggregate |
| Syntax | SELECT DISTINCT col1, col2 | SELECT 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