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.
sql
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.