die hard

ในโลกของการจัดการข้อมูลขนาดใหญ่ (Big Data) และการวิเคราะห์เชิงลึก (Deep Analytics) การเขียนคำสั่ง SQL ที่ซับซ้อนเพื่อดึงข้อมูลที่ต้องการนั้นเป็นทักษะที่ขาดไม่ได้ อย่างไรก็ตาม เมื่อ Query มีหลายขั้นตอนหรือต้องมีการอ้างอิงชุดข้อมูลย่อยหลายครั้ง โค้ด SQL มักจะกลายเป็นก้อนที่อ่านยากและดูแลรักษายาก

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

💡 Common Table Expressions (CTEs) คืออะไร?

CTE คือการกำหนดชุดผลลัพธ์ชั่วคราว (Temporary Result Set) ภายในขอบเขตของคำสั่ง SELECT หลัก มันทำหน้าที่เหมือนการสร้างตารางเสมือน (Virtual Table) ที่เราสามารถอ้างอิงได้หลายครั้งภายใน Query เดียว โดยไม่จำเป็นต้องใช้ Subqueries ที่ซ้อนกันหลายชั้น (Nested Subqueries) ซึ่งช่วยลดความซับซ้อนของโครงสร้างโค้ดได้อย่างมาก

🚀 การใช้งาน CTE ใน PostgreSQL

การใช้ CTE จะช่วยให้เราแบ่งปัญหาใหญ่ให้เป็นส่วนย่อยๆ ที่จัดการได้ง่ายขึ้น ทำให้โค้ดของเรามีโครงสร้างแบบลำดับขั้นตอน (Step-by-Step Logic) ซึ่งเป็นหลักการออกแบบที่ดีเยี่ยมในระดับสถาปัตยกรรมข้อมูล

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

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

SQL

WITH DepartmentTotal AS ( -- กำหนด CTE ชื่อ DepartmentTotal <br> SELECT department_id, SUM(sale_amount) AS total_sales <br> FROM sales <br> GROUP BY department_id ) <br> SELECT <br>     department_id, <br>     total_sales, <br>     AVG(total_sales) OVER () AS average_total <br> FROM DepartmentTotal <br> ORDER BY department_id;

✨ การใช้งานขั้นสูง: Recursive CTEs

ความสามารถที่ทำให้ CTEs เป็นเครื่องมือระดับ Senior Architect คือการใช้ Recursive CTEs ซึ่งเหมาะสำหรับการจัดการข้อมูลที่มีโครงสร้างแบบลำดับชั้น (Hierarchical Data) เช่น โครงสร้างองค์กร (Organizational Charts) หรือลำดับของรายการต่างๆ

Recursive CTE จะทำงานโดยการเรียกตัวเองซ้ำๆ (Self-referencing) จนกว่าจะถึงเงื่อนไขการหยุดที่กำหนดไว้ ทำให้เราสามารถดึงข้อมูลทั้งหมดในสายงาน (Chain of Command) ได้อย่างมีประสิทธิภาพ

✅ บทสรุป: ทำไมต้องใช้ CTEs?

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

Exit mobile version