Day: September 1, 2022

  • หาข้อมูลที่ซ้ำซ้อนในตารางด้วย LAG Function

    LAG Function
    เป็นฟังก์ชันที่ให้เราสามารถเข้าถึงแถวข้อมูลก่อนหน้าของตารางได้โดยที่ไม่ต้องทำการ self-join

    รูปแบบการใช้งาน
    LAG ( expression [, offset [, default] ] )
    OVER ( [ query_partition_clause ] order_by_clause )

    โดยที่

    • expression : ฟิลด์ข้อมูลที่ต้องการแสดง
    • offset : ระบุว่าต้องการแถวข้อมูลลำดับที่เท่าไหร่ก่อนแถวปัจจุบัน เช่น 2 คือต้องการข้อมูลลำดับที่สองก่อนหน้าแถวปัจจุบัน กรณีไม่ระบุ จะหมายถึงข้อมูลแถวที่1
    • query_partition_clause : ใช้สำหรับการจัดกลุ่มข้อมูลเพื่อให้ได้ผลลัพธ์ตามกลุ่มที่ต้องการ
    • order_by_clause : ใช้เพื่อจัดลำดับข้อมูลภายในแต่ละ partition

    ตัวอย่าง : การใช้งานฟังก์ชัน LAG

    Query ข้างต้นเป็นการหาผลการเรียนของภาคการศึกษาก่อนหน้าของรายวิชาที่ลงทะเบียนเรียน โดยที่

    • expression : ข้อมูลผลการเรียนคือฟิลด์ GRADE
    • offset : กรณีไม่ระบุหมายถึงลำดับที่หนึ่งก่อนแถวปัจจุบัน และ ตัวเลข 2 หมายถึง ลำดับที่สองก่อนแถวปัจจุบัน
    • query_partition_clause : จัดกลุ่มข้อมูลตามฟิลด์ SUBJECT_ID
    • order_by_clause : จัดเรียงข้อมูลภายใน SUBJECT_ID ด้วยฟิลด์ EDU_YEAR แล้วตามด้วยฟิลด์ EDU_TERM

    ผลลัพธ์จาก Query

    ✔ ฟิลด์ GRADE_BEFORE_1 = ผลการเรียนภาคการศึกษาก่อนหน้า
    ✔ ฟิลด์ GRADE_BEFORE_2 = ผลการเรียนของ 2 ภาคการศึกษาก่อนหน้า
    กรณีรายวิชาไหนมีค่าเป็น NULL หมายความว่านักศึกษาลงทะเบียนเรียนเพียงครั้งเดียว ไม่เคยลงทะเบียนเรียนซ้ำ
    รายวิชาในกรอบสีแดงคือรายวิชาที่นักศึกษามีการลงทะเบียนเรียนซ้ำ ตัวอย่างเช่น
    🎯 รายวิชา 0006343 มีการลงทะเบียนเรียน 2 ครั้ง
    🎯 รายวิชา 0007615 มีการลงทะเบียนเรียน 5 ครั้ง
    สามารถดูข้อมูลผลการเรียนของภาคการศึกษาก่อนหน้าได้ที่ฟิลด์ GRADE_BEFORE_1 และ GRADE_BEFORE_2

    คราวนี้เรามาประยุกต์ใช้งานฟังก์ชัน LAG กันค่ะ

    ตัวอย่าง : การประยุกต์ใช้ฟังก์ชัน LAG เพื่อหาข้อมูลที่ซ้ำซ้อนในตาราง
    เรามีตารางข้อมูลชื่อ V3_PLAN_SEC2_1_PLO ซึ่งประกอบด้วยฟิลด์
    PLAN_SEC2_1_PLO_ID (🔑) , PLAN_REPORT_ID และ PLO_DESC
    โดยเงื่อนไขของระบบกำหนดไว้ว่าจะต้องมี PLAN_REPORT_ID และ PLO_DESC เพียงรายการเดียวเท่านั้น

    📌จากข้อมูลข้างต้นจะเห็นว่ามีข้อมูลที่มีรายการซ้ำซ้อนของข้อมูล PLAN_REPORT_ID และ PLO_DESC
    เช่นที่ PLAN_REPORT_ID = C2933F24A525 และที่ PLAN_REPORT_ID = C29482CB6553 เป็นต้น📌

    วิธีการหาข้อมูลที่ซ้ำซ้อนเราสามารถหาได้หลายวิธีแต่วันนี้จะขอนำเสนอการประยุกต์ใช้ฟังก์ชัน LAG เพื่อหาข้อมูลที่ซ้ำซ้อนกันค่ะ
    ตามคำอธิบายข้างต้น LAG Function เป็นฟังก์ชันที่ให้เราสามารถเข้าถึงแถวข้อมูลก่อนแถวปัจจุบันได้โดยที่ไม่ต้องทำการ self-join
    ดังนั้นเราก็จะประยุกต์ใช้ความสามารถนี้ในการหาข้อมูลที่ซ้ำซ้อนก้นโดยมีขั้นตอนด้งนี้

    • ใช้ฟังก์ชัน LAG ในการดึงค่าข้อมูล PLO_DESC ก่อนหน้า ของ PLAN_REPORT_ID ปัจจุบัน
    • ทำการเปรียบเทียบค่า PLO_DESC กับ PLO_DESC ก่อนหน้า
    • กรณี PLO_DESC มีค่าเท่ากับ PLO_DESC ก่อนหน้า แสดงว่าข้อมูลรายการปัจจุบันมีความซ้ำซ้อนกับข้อมูลก่อนหน้า

    สามารถเขียนเป็น Query ได้ดังนี้

    ผลลัพธ์จาก Query

    😊😊เราได้ข้อมูลรายการที่ซ้ำซ้อนกันเรียบร้อยแล้วค่ะ ก็ไม่ยากแล้วใช่มั้ยคะที่จะลบรายการที่ซ้ำซ้อนออกจากตารางข้อมูลต่อไป
    ^_^ หวังว่าโพสนี้จะเป็นประโยชน์ต่อผู้อ่านไม่มากก็น้อยนะคะ แล้วพบกันใหม่ค่ะ