CTE (mệnh đề WITH) cho phép đặt tên cho một subquery, để chẻ một query phức tạp thành từng bước dễ đọc — hoặc dùng kèm câu lệnh sửa dữ liệu.
PostgreSQL hiện đại (từ bản 12) thường tự "inline" CTE để tối ưu, nhưng vẫn nên biết về việc materialization khi cần tinh chỉnh hiệu năng.
WITH paid_orders AS (
SELECT * FROM orders WHERE status = 'paid'
)
SELECT user_id, count(*) FROM paid_orders GROUP BY user_id;Dùng CTE chủ yếu để query dễ đọc hơn; nếu hiệu năng quan trọng, hãy kiểm tra lại kế hoạch bằng EXPLAIN.
A CTE (the WITH clause) lets you name a subquery to split a complex query into readable steps — or to participate in data-modifying statements.
Modern PostgreSQL (since v12) usually "inlines" CTEs for optimization, but it's still worth knowing about materialization when tuning performance.
WITH paid_orders AS (
SELECT * FROM orders WHERE status = 'paid'
)
SELECT user_id, count(*) FROM paid_orders GROUP BY user_id;Use CTEs mainly for readability; when performance matters, recheck the plan with EXPLAIN.