ข้อแตกต่าง ระหว่าง GROUP BY และ DISTINCT

GROUP BY และ DISTINCT ใช้เพื่อเลือกข้อมูลที่เหมือนๆกัน ออกมาแสดงได้เหมือนกัน แต่ทั้ง 2 แบบมีจุดประสงค์ต่างกัน คือ

DISTINCT ใช้ในการกรองข้อมูลที่ซ้ำกัน (ทุกฟิลด์ที่ระบุ) ให้ออกมาเพียงรายการเดียวเท่านั้น ยกตัวอย่างข้อมูล                                                                                                                                                                                                                                                
sexname
fตัวอย่าง
mเดโม
mเดโม
mทดสอบ
SELECT DISTINCT `sex` FROM `user`
คำสั่งด้านบนจะ Query เอาข้อมูลที่มี sex ซ้ำกันออกมาเพียงรายการเดียว คำสั่งรูปแบบนี้มักจะใช้ในการหาว่ามี sex อะไรบ้างอยู่ในระบบ                                                                                                                 
sex
f
m
ลองดูอีกตัวอย่างหนึ่ง
SELECT DISTINCT `sex`,`name` FROM `user`
มีการระบุฟิลด์ `name` ด้วย คำสั่งด้านบนจะ Query เอาข้อมูลที่มีทั้ง `sex` และ `name` ซ้ำกันออกมาเพียงรายการเดียว ส่วนรายการที่ `sex` เหมือนกันแต่ `name` ไม่ซ้ำกับอันอื่นจะยังคงเอาออกมาด้วย สังเกตนะครับว่า DISTINCT มันมีผลกับทุกฟิลด์ที่ระบุ                                                                                                                                                                                                    
sexname
fตัวอย่าง
mเดโม
mทดสอบ
คำสั่ง DISTINCT ถ้าใช้ร่วมกับ Aggregate ฟังก์ชั่น เช่น COUNT(), SUM() อาจให้ผลแปลกๆ ไม่แนะนำให้ใช้ครับ ตัวอย่าง
SELECT DISTINCT `sex`,COUNT(*) FROM `user`
ผลลัพท์                                                                                                            
sexCOUNT(*)
f4
จากตัวอย่างจะเห็นว่ามันสรุปข้อมูลผิดพลาด และคืนค่าข้อมูลออกมาเพียงแถวเดียวเท่านั้น ผมแนะนำว่า ถ้า Query มี Aggregate ฟังก์ชั่น ให้ใช้ GROUP BY แทน
SELECT `sex`, COUNT(*) FROM `user` GROUP BY `sex`
ผลลัพท์                                                                                                                                                        
sexCOUNT(*)
f1
m3
GROUP BY คือการจัดกลุ่มข้อมูลที่เหมือนๆกัน ซึ่งมันจะทำการจัดกลุ่มข้อมูลที่เหมือนๆกัน (ตามที่ระบุไว้ใน GROUP BY) แล้วถึงจะให้ Aggregate ฟังก์ชั่นดำเนินการกับข้อมูลในแต่ละกลุ่มอีกที

สรุป DISTINCT เหมาะสำหรับเลือกเอาข้อมูลที่ซ้ำๆกันเพียงฟิลด์ใดฟิลด์หนึงมาใช้งาน เช่นการเลือกเพศ มาใส่ Select เป็นต้น ส่วน GROUP BY เรามักจะใช้ร่วมกับ query ที่ซับซ้อนกว่าเพื่อเลือกเอาข้อมูลที่ต้องการมาแสดงผล นอกจากนี้ GROUP BY ยังสามารถใช้ร่วมกับ HAVING เพื่อจำกัดข้อมูลที่ต้องการได้อีกด้วย
ผู้เขียน Goragod โพสต์เมื่อ 02 เม.ย. 2551 เปิดดู 37,286 ป้ายกำกับ SQL

เรื่องที่เกี่ยวข้อง

^