มาให้คำจำกัดความกันก่อนครับ Duplicate Data Management หรือการจัดการเรื่องของข้อมูลซ้ำซ้อน คงมีหลายเรื่องที่เราต้องทำความเข้าใจครับ บางครั้งก็ซ้ำซ้อนเพราะผิดพลาดทำนองว่ามี User หรือ Process บันทึกข้อมูลซ้ำซ้อนเข้ามานี่ก็เรื่องนึง ซึ่งคงจะยกยอดเอาไปพูดถึงในเรื่อง "การจัดการกับข้อผิดพลาด" นะครับ แต่ที่กำลังจะพูดถึงก่้อนนี้คือ การจัดการ หรือจัดทำรายงานจากข้อมูลในฐานข้อมูลที่มันมีการเกิดซ้ำ ว่ามีซ้ำกันกี่ครั้ง มูลค่ารวมกันได้เท่าไหร่ อะไรลักษณะนี้แหละครับ
ขอแนะนำให้รู้จักกับ DISTINCT ครับ มันเป็นคำคุณศัพท์ที่ใช้ขยายความศัพท์อื่นๆ คำแปลของมันก็ประมาณว่า "แตกต่างชัดเจน" "แยกกันชัดเจน" เมื่อเอามาใส่ลงใน SQL Command ของเรา ก็จะสร้างเงื่อนไขเพิ่มเติมว่าจะเอาผลลัพธ์เฉพาะที่แตกต่างกันอย่างชัดเจน ซึ่งให้สั้นง่ายกว่านั้นคือ "กรองเอาเฉพาะที่มันไม่เหมือนกัน" โดยจะต้องใส่ไว้ข้างหน้าฟิลด์ (คอลัมน์) ที่เราต้องการกรอง ตัวอย่างเช่น
SELECT DISTINCT employee_id FROM invoice WHERE date=date(now()) ;
ในตัวอย่างนี้ผมได้สมมุติเอาว่า ผมมีตาราง invoice เก็บข้อมูลการขายของบริษัทฯ โดยมีพนักงานทำการขายหลายครั้งต่อวัน ซึ่งแน่นอนว่าแต่ละคนจะต้องทำรายการขายคนละหลายครั้ง และมีพนักงานอยู่หลายคน ดังนั้นเมื่อผมอยากรวมยอดเงินรายวันของแต่ละคน จึงต้องหารหัสของแต่ละคนที่ทำรายการวันนี้ ซึ่งก็เขียน SQL Command โดยใช้ DISTINCT ประกอบดังกล่าว ผลลัพท์ก็คือ ผมได้ผลที่กรองเอาเฉพาะ employee_id ที่แตกต่างกันออกมานั่นเอง ส่วนวิธีการนำไปใช้ก็อาจนำข้อมูลที่ได้ไปเป็นเงื่อนไขของการหาผลรวมรายวันต่อไปครับ
แล้วเราจะแยกวันนี้ออกจากวันอื่นได้อย่างไรก็ตั้งเงื่อนไขเข้าไปกรองครับ ในที่นี้ผมมีฟิลด์ (คอลัมน์) เพื่อเก็บวันที่ทำรายการ ตังนั้นผมจึงใช้ ฟังก์ชั่น date() ซึ่งจะพยายามแปลงค่าในวงเล็บให้อยู่ในรูปแบบวันที่ yyyy-mm-dd ไปครอบฟังก์ชั่น now() ซึ่งจะคืนค่าเป็น วันและเวลา ณ ขณะนั้นๆออกมา ผลก็คือเงื่อนไข date=date(now()) จึงใช้กรองเอาข้อมูลที่เกิดขึ้นในวันนั้นๆครับ
สรุปว่า จากตัวอย่างมีเรื่องน่ารู้อยู่ 2 เรื่องสำหรับมือใหม่ที่นำไปใช้ได้อย่างมืออาชีพคือ DISTINCT และ date(now()) ครับ จดจำให้ขึ้นใจเอาไว้เลยครับได้ใช้ตลอดแน่ๆครับผมรับรอง
เดี๋ยวในตอนหน้าเรามาพูดถึงการขยายผลของ DISTINCT กันอีกที ซึ่งจะทำให้เราได้ผลลัพธ์ที่ควรจะได้ สำหรับตอนนี้ไม่อยากให้ยาวกว่านี้แล้ว
เจอกันตอนหน้าสวัสดีครับ
0 ความคิดเห็น