PostgreSQL Cheat Sheet/Common table expression

Use a CTE to structure a multi-step query.

Section: Querying, Joins, and Aggregation

Common table expression

sql
sql
WITH recent_orders AS (
  SELECT * FROM orders WHERE created_at >= now() - interval '7 days'
)
SELECT customer_id, count(*)
FROM recent_orders
GROUP BY customer_id;
Explanation

See summary for usage details.

Learn the surrounding workflow

Compare similar commands or jump into common fixes when this command is part of a bigger troubleshooting path.

Related commands

Same sheet · prioritizing Querying, Joins, and Aggregation
Basic SELECT
Fetch a sorted subset of rows.
OpenIn sheetsqlsame section
Recursive CTE
Generate or traverse recursive data with `WITH RECURSIVE`.
OpenIn sheetsqlsame section
Use DISTINCT ON
Pick one row per group using PostgreSQL's `DISTINCT ON` extension.
OpenIn sheetsqlsame section
Inner join
Combine matching rows from two tables.
OpenIn sheetsqlsame section
Left join
Keep all rows from the left side even when no match exists.
OpenIn sheetsqlsame section
Group and filter aggregates
Aggregate rows and then filter groups.
OpenIn sheetsqlsame section