ข้ามไปเนื้อหาหลัก

วิธีหาแถวซ้ำใน SQL และกำหนดนิยามข้อมูลซ้ำโดย Michael Nocito

เรียนรู้วิธีตรวจสอบแถวข้อมูลซ้ำใน SQL ด้วยคำสั่ง COUNT และ GROUP BY จากบทความของ Michael Nocito ที่ใช้ตารางข้อมูลจำลอง 14 แถว

เรียบเรียงโดย AI
Inewgen
22 Aug 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)อัปเดตล่าสุด 29 Aug 2026
แชร์
วิธีหาแถวซ้ำใน SQL และกำหนดนิยามข้อมูลซ้ำโดย Michael Nocito

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • เปรียบเทียบ COUNT(*) และ COUNT(DISTINCT) เพื่อตรวจเช็คความผิดปกติก่อนเขียนโค้ด
  • นิยามของคำว่าข้อมูลซ้ำขึ้นอยู่กับการเลือกคอลัมน์ที่จะนำมาจัดกลุ่มด้วย GROUP BY
  • ใช้คำสั่ง HAVING เพื่อกรองดูเฉพาะกลุ่มที่มีจำนวนแถวมากกว่าหนึ่งแถวขึ้นไป
  • ใช้ฟังก์ชัน ROW_NUMBER ช่วยทำเครื่องหมายแถวที่ต้องเก็บไว้แทนการลบทิ้งทันที

บทความนี้เขียนโดย Michael Nocito ผู้เชี่ยวชาญด้านข้อมูล โดยใช้เวลาศึกษาประมาณ 20 นาทีเพื่อทำความเข้าใจวิธีการตรวจสอบแถวข้อมูลซ้ำในตารางฐานข้อมูล ค้นหาสำเนาทุกชุด และตัดสินใจว่าจะเก็บแถวใดไว้โดยใช้ชุดคำสั่ง SQL ที่เข้าใจง่าย ขั้นตอนสำคัญก่อนเริ่มเขียนคำสั่งใดๆ คือการกำหนดนิยามให้ชัดเจนว่าอะไรคือข้อมูลซ้ำสำหรับตารางนั้นๆ เนื่องจากแถวข้อมูลอาจตรงกันทุกคอลัมน์หรือตรงกันแค่บางคอลัมน์ ซึ่งถือเป็นปัญหาที่แตกต่างกันและต้องใช้วิธีแก้ที่ต่างกัน

ขั้นตอนแรกที่ควรทำเสมอก่อนทำงานกับตารางชุดใหม่คือการรันคำสั่งเปรียบเทียบระหว่าง COUNT(*) กับ COUNT(DISTINCT key) หากตัวเลขทั้งสองค่าไม่ตรงกัน แสดงว่าตารางนั้นมีข้อมูลซ้ำซ้อนซ่อนอยู่ ข้อมูลตัวอย่างที่ใช้อธิบายในบทความนี้มาจากตาราง customers ที่มีทั้งหมด 14 แถว และจงใจใส่ข้อมูลซ้ำไว้ 3 แถว เพื่อให้สามารถตรวจสอบผลลัพธ์ด้วยตาเปล่าและยืนยันความถูกต้องได้ทันทีใน SQLite

data table spreadsheet columns rows

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

14จำนวนแถวทั้งหมดในตารางตัวอย่าง
11จำนวน ID ที่ไม่ซ้ำกัน
3จำนวนแถวที่เป็นสำเนาส่วนเกิน

ความท้าทายแรกก่อนที่จะเริ่มตามล่าหาข้อมูลซ้ำคือการวิเคราะห์ว่าตัวตนของข้อมูลซ้ำคืออะไร เช่น ลูกค้าหมายเลข 103 ปรากฏตัว 3 ครั้งโดยมีทุกคอลัมน์เหมือนกันทั้งหมด ในขณะที่ลูกค้าหมายเลข 105 ปรากฏตัว 2 ครั้งแต่มีเมืองที่แตกต่างกัน หรือกรณีของ Ben Ortiz ที่มีอีเมลปรากฏภายใต้รหัส ID ที่ต่างกัน คำถามเหล่านี้ไม่มีคำตอบตายตัว เพราะคำว่าข้อมูลซ้ำไม่ใช่คุณสมบัติที่มีมาในตัวของข้อมูล แต่เป็นการตัดสินใจของผู้ใช้งานว่าต้องใช้คอลัมน์ใดบ้างที่ต้องตรงกันจึงจะถือว่าเป็นข้อมูลเดียวกัน

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

การเข้าใจความแตกต่างระหว่างคีย์ธรรมชาติและคอลัมน์ทั้งหมดถือเป็นหัวใจสำคัญในการจัดการฐานข้อมูล การเลือกใช้ GROUP BY ผิดคอลัมน์อาจทำให้ข้อมูลที่ควรถูกรวมกลายเป็นถูกมองข้าม หรือทำให้ข้อมูลที่ถูกต้องถูกลบออกโดยไม่ตั้งใจ การรันการตรวจสอบด้วย COUNT (DISTINCT) ก่อนทำ Join จึงเป็นแนวปฏิบัติที่ดีเยี่ยมของ Data Analyst ทุกคนเพื่อป้องกันไม่ให้ยอดสรุปผลลัพธ์ปลายทางผิดพลาดแบบเงียบๆ

"Duplicate is not a property of the data. It is a decision you make about which columns have to match before two rows mean the same thing."

Michael Nocito

หากต้องการตรวจสอบว่ามีรหัส ID ใดปรากฏซ้ำหรือไม่ สามารถใช้คำสั่ง SELECT COUNT(*) AS total_rows, COUNT(DISTINCT customer_id) AS distinct_ids FROM customers ซึ่งจะได้ผลลัพธ์เป็น 14 แถวและ 11 รหัสที่ไม่ซ้ำกัน ทำให้ทราบทันทีว่ามีส่วนต่างอยู่ 3 แถว ขั้นตอนต่อมาคือการใช้ GROUP BY ร่วมกับคอลัมน์ที่ต้องการ และคัดกรองเฉพาะกลุ่มที่มีจำนวนสำเนามากกว่า 1 ด้วยคำสั่ง HAVING เพื่อระบุว่าข้อมูลส่วนเกินนั้นเป็นของลูกค้ารายใดบ้าง

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้