Distinct หนึ่งคอลัมน์แต่แสดงผลหมดทุกคอลัมน์
หลายๆคนคงรู้จักคำสั่ง SQL Distinct กันมาบ้างนะครับ แต่ปัญหาของมันก็คือ Distinct มันจะทำให้ข้อมูลเหลืออย่างละ 1 ใน column ที่เราเลือกซึ่งถ้าเลือกหลาย column ก็คือต้องไม่ซ้ำทั้ง 2 column ถึงจะแสดงผล แต่ประเด็นคือผมเคยอยู่ในสถานะการที่ต้องการให้ column หนึ่งไม่ซ้ำแต่โชว์ข้อมูลแถวอื่นให้หมด แต่ Distinct มันไม่สามารถทำได้หรอกครับ ซึ่งหลังจากไปอ่านๆมาก็มีทั้งแบบใช้ Sub-Query บางและอื่นๆบางแต่สำหรับตัวผมลองเล่นดูก็เลยพอรู้ว่าจริงๆมันมีคำสั่งที่ชื่อ Group by ครับซึ่งจะมาแก้ปัญหานี้ได้
ตัวอย่างเช่น
SELECT * FROM table GROUP BY url
ถ้าแบบนี้คือเลือกทุก column และให้รวมกลุ่มด้วย url ดังนั้นถ้ามี url ซ้ำกันมันจะรวมเป็น 1 กลุ่มซึ่งมันก็เหมือนกับ Distinct หนึ่งคอลัมน์แต่แสดงผลทั้งหมด ข้อเสียของการใช้แบบนี้ก็คือ ข้อมูลที่ถูก Group เข้าไปแล้วจะแสดงเพียง 1 ทำให้ข้อมูลบางอันไม่ได้ถูกโชว์ด้วย (แต่มันก็คือสิ่งที่เราต้องการไม่ใช่หรือ?)
เนื้อหาคล้ายกันที่น่าสนใจ


