ในโลกของการวิเคราะห์ข้อมูลขนาดใหญ่ (Big Data) การดึงข้อมูลที่ถูกต้องและครบถ้วนตามเงื่อนไขที่ซับซ้อนถือเป็นความท้าทายหลัก ฐานข้อมูลเชิงสัมพันธ์อย่าง PostgreSQL ได้ถูกออกแบบมาให้รองรับการประมวลผลที่ลึกและมีประสิทธิภาพสูง ด้วยความสามารถในการจัดการข้อมูลที่ซับซ้อน การทำความสะอาดข้อมูล และการรวมชุดข้อมูล (Aggregation) ที่เป็นระบบ
บทความนี้จะเจาะลึกถึงหลักการที่เรียกว่า ‘การสรรพลี้หวน’ ในบริบทของ PostgreSQL ซึ่งหมายถึงการสร้างกระบวนการที่สามารถรวบรวมข้อมูลจากหลายแหล่งที่มาและหลายขั้นตอนการคำนวณกลับมาเป็นผลลัพธ์ที่สมบูรณ์และเป็นระเบียบ โดยหัวใจสำคัญของเทคนิคนี้คือการใช้ Common Table Expressions (CTEs) หรือคำสั่ง WITH ซึ่งช่วยให้เราสามารถแบ่งชุดคำสั่ง SQL ที่ซับซ้อนออกเป็นส่วนย่อย ๆ ที่อ่านง่ายและจัดการได้ทีละขั้นตอน
การใช้ Common Table Expressions (CTEs) ใน PostgreSQL
CTEs คือการสร้างชุดผลลัพธ์เสมือน (Temporary Result Set) ที่สามารถถูกอ้างอิงได้ภายในคำสั่ง SELECT หลัก การใช้ WITH clause ช่วยให้สถาปนิกข้อมูลสามารถจำลองกระบวนการคิดเชิงตรรกะ (Logical Flow) ของการประมวลผลข้อมูลได้เสมือนการไหลของข้อมูล (Data Pipeline) ที่มีหลายด่าน
สมมติว่าเรามีข้อมูลการสั่งซื้อ (Orders) และข้อมูลสินค้า (Products) เราต้องการคำนวณยอดรวมของสินค้าที่ถูกสั่งซื้อในหมวดหมู่ที่กำหนด โดยต้องผ่านการกรองข้อมูลและคำนวณส่วนลดในหลายขั้นตอน การใช้ CTEs จะช่วยให้โค้ดไม่สับสนและเพิ่มประสิทธิภาพในการอ่านโค้ดได้อย่างมาก
ตัวอย่างการใช้งาน PostgreSQL (CTE)
ตัวอย่างโค้ดต่อไปนี้แสดงการใช้ CTE เพื่อจำลองการคำนวณยอดรวมสินค้าที่ผ่านการกรองและคำนวณส่วนลด:
SQL
-- 1. สร้างข้อมูลจำลอง (Setup Tables) --
CREATE TABLE products (product_id INT, category VARCHAR(50), price NUMERIC);
INSERT INTO products VALUES (1, 'Electronics', 1500.00), (2, 'Books', 250.00), (3, 'Electronics', 800.00);
CREATE TABLE orders (order_id INT, product_id INT, quantity INT);
INSERT INTO orders VALUES (101, 1, 2), (102, 2, 5), (103, 3, 1);
-- 2. ใช้ CTE เพื่อคำนวณและรวมข้อมูล (The 'Sarn Plii Huan' Logic) --
WITH FilteredOrders AS (
-- ขั้นตอนที่ 1: กรองเฉพาะสินค้าในหมวดหมู่ 'Electronics' --
SELECT o.order_id, p.product_id, p.price, o.quantity
FROM orders o
JOIN products p ON o.product_id = p.product_id
WHERE p.category = 'Electronics'
),
CalculatedTotal AS (
-- ขั้นตอนที่ 2: คำนวณยอดรวมเบื้องต้น (Subtotal) --
SELECT order_id, product_id, price * quantity AS subtotal
FROM FilteredOrders
)
-- ขั้นตอนที่ 3: ดึงผลลัพธ์สุดท้ายที่ผ่านการคำนวณทั้งหมด --
SELECT
order_id,
SUM(subtotal) AS total_revenue
FROM CalculatedTotal
GROUP BY order_id
ORDER BY total_revenue DESC;
บทสรุป
การใช้ Common Table Expressions (CTEs) ใน PostgreSQL ไม่เพียงแต่ช่วยให้โค้ด SQL มีความเป็นโมดูล (Modular) และอ่านง่ายขึ้นเท่านั้น แต่ยังช่วยให้สถาปนิกและนักพัฒนาสามารถจัดการกับกระบวนการวิเคราะห์ข้อมูลที่ซับซ้อนได้อย่างเป็นระบบเสมือนการ ‘สรรพลี้หวน’ ข้อมูลจากหลายขั้นตอนให้กลับมาเป็นผลลัพธ์ที่แม่นยำและพร้อมใช้งาน ด้วยความสามารถเหล่านี้ PostgreSQL จึงเป็นเครื่องมือที่ทรงพลังสำหรับการสร้างระบบวิเคราะห์ข้อมูลระดับองค์กร (Enterprise Data Analytics) อย่างแท้จริง