ego

ในโลกของการพัฒนาฐานข้อมูลเชิงซับซ้อน การจัดการข้อมูลที่ซับซ้อนมักเป็นความท้าทายหลัก นักพัฒนามักต้องเขียน Query ที่มีการอ้างอิงข้อมูลซ้ำ หรือต้องการแบ่งขั้นตอนการคำนวณออกเป็นส่วนย่อยๆ เพื่อให้โค้ดอ่านง่ายและมีประสิทธิภาพ การทำความเข้าใจแนวคิดของ ‘ขอบเขต’ (Scope) และ ‘ตัวตนชั่วคราว’ (Temporary Identity) ของข้อมูลจึงเป็นสิ่งสำคัญ

ในบริบทของ PostgreSQL แนวคิดที่ตอบโจทย์นี้ได้อย่างสมบูรณ์แบบคือ **Common Table Expressions (CTEs)** หรือการใช้ไวยากรณ์ WITH ซึ่งเปรียบเสมือนการสร้าง ‘ตัวแปรตาราง’ (Table Variable) ชั่วคราวภายในขอบเขตของ Query นั้นๆ ทำให้เราสามารถแบ่ง Query ที่ซับซ้อนออกเป็นส่วนย่อยๆ ที่มีชื่อเรียกได้ ทำให้โค้ดมีความเป็นระเบียบ (Readability) และสามารถเรียกใช้ชุดข้อมูลย่อยนั้นซ้ำได้โดยไม่จำเป็นต้องเขียนคำสั่งซ้ำ

หลักการทำงานของ CTEs ใน PostgreSQL

CTEs ไม่ใช่ตารางจริง แต่เป็นชุดผลลัพธ์ชั่วคราวที่ถูกกำหนดชื่อขึ้นมาเพื่อใช้ภายใน Query ชุดเดียว การใช้ CTEs ช่วยให้เราจำลองกระบวนการคิดของมนุษย์ในการแก้ปัญหาที่ซับซ้อน: คือการแบ่งปัญหาใหญ่ให้เป็นปัญหาย่อยๆ ที่จัดการได้ทีละขั้นตอน

ไวยากรณ์พื้นฐานคือการนำคำสั่ง WITH มานำหน้าคำสั่ง SELECT หลัก โดยกำหนดชื่อให้กับชุดข้อมูลชั่วคราวนั้นๆ และตามด้วยคำสั่ง SELECT ที่เป็นตัวกำหนดชุดข้อมูลนั้น

ตัวอย่างการใช้งาน CTEs: การคำนวณยอดรวมตามแผนก

สมมติว่าเรามีตาราง sales และต้องการคำนวณยอดขายรวมของแต่ละแผนกก่อน จากนั้นจึงนำผลลัพธ์นั้นไปคำนวณค่าเฉลี่ยของยอดขายรวมทั้งหมด การใช้ CTE จะช่วยให้เราจำลองขั้นตอนเหล่านี้ได้อย่างชัดเจน:

SQL

WITH DepartmentSales AS ( -- นี่คือ CTE ที่กำหนดชื่อว่า DepartmentSales
    SELECT
        department_id,
        SUM(amount) AS total_sales
    FROM
        sales
    GROUP BY
        department_id
) -- CTE ต้องจบด้วยวงเล็บปิด
SELECT
    department_id,
    total_sales,
    AVG(total_sales) OVER () AS overall_avg
FROM
    DepartmentSales
ORDER BY
    department_id;

ในตัวอย่างนี้ DepartmentSales คือ ‘ตัวตนชั่วคราว’ ของข้อมูลยอดรวม ซึ่งเราสามารถอ้างอิงถึงมันในคำสั่ง SELECT หลักได้ทันที ทำให้ Query มีความกระชับและเข้าใจง่ายกว่าการใช้ Subquery ซ้อนกันหลายชั้น

ข้อดีในการใช้ CTEs

  • Readability (ความอ่านง่าย): โค้ดถูกจัดระเบียบเป็นขั้นตอน ทำให้ง่ายต่อการ Debug และทำความเข้าใจ
  • Recursion: CTEs สามารถใช้เพื่อจัดการกับข้อมูลแบบลำดับชั้น (Hierarchical Data) เช่น โครงสร้างองค์กร (Organizational Tree) ซึ่งเป็นสิ่งที่ทำได้ยากด้วย SQL ทั่วไป
  • Reusability: สามารถอ้างอิงถึงชุดข้อมูลชั่วคราวนั้นๆ ได้หลายครั้งภายใน Query เดียว

บทสรุป

การใช้ Common Table Expressions (CTEs) ใน PostgreSQL ไม่ได้เป็นเพียงแค่ทางเลือก แต่เป็นเครื่องมือทางสถาปัตยกรรมที่สำคัญสำหรับนักพัฒนาที่ต้องการเขียน Query ที่มีประสิทธิภาพสูงและมีความซับซ้อนในการจัดการข้อมูล การเข้าใจการกำหนดขอบเขตและตัวตนชั่วคราวของข้อมูลด้วย WITH clause จะช่วยให้คุณยกระดับทักษะการเขียน SQL จากระดับพื้นฐานไปสู่ระดับ Senior Architect ได้อย่างแท้จริง

Exit mobile version