sqladvanced
Recursive CTE for Hierarchical Data
Query hierarchical data like org charts, categories, and file trees using recursive CTEs.
sqlPress ⌘/Ctrl + Shift + C to copy
-- Employee org chart
WITH RECURSIVE org_tree AS (
-- Anchor: top-level managers
SELECT
id, name, manager_id,
name::text AS path,
0 AS depth
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Recursive: find direct reports
SELECT
e.id, e.name, e.manager_id,
t.path || ' > ' || e.name,
t.depth + 1
FROM employees e
JOIN org_tree t ON e.manager_id = t.id
)
SELECT
REPEAT(' ', depth) || name AS org_chart,
path,
depth
FROM org_tree
ORDER BY path;
-- Category breadcrumbs
WITH RECURSIVE cat_path AS (
SELECT id, name, parent_id, ARRAY[name] AS breadcrumb
FROM categories WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.name, c.parent_id, p.breadcrumb || c.name
FROM categories c
JOIN cat_path p ON c.parent_id = p.id
)
SELECT id, name, array_to_string(breadcrumb, ' / ') AS full_path
FROM cat_path
WHERE id = 42;
-- Generate date series (recursive)
WITH RECURSIVE dates AS (
SELECT DATE '2024-01-01' AS d
UNION ALL
SELECT d + 1 FROM dates WHERE d < DATE '2024-12-31'
)
SELECT d AS date,
EXTRACT(dow FROM d) AS day_of_week,
TO_CHAR(d, 'Month') AS month_name
FROM dates;Use Cases
- Querying organizational hierarchies
- Building category breadcrumbs
- Generating date series for gap analysis
Tags
Related Snippets
Similar patterns you can reuse in the same workflow.
sqladvanced
Recursive CTE for Tree Queries
Traverse hierarchical data like org charts and nested categories using PostgreSQL recursive common table expressions.
Best for: Org chart navigation
#cte#recursive
sqlintermediate
Common Table Expression (CTE) Patterns
Use CTEs to write readable, composable SQL queries with WITH clauses for complex logic.
Best for: complex queries
#sql#cte
sqlintermediate
Recursive CTE - Technique 41
Recursive query traversal
Best for: database operations
#sql#database
sqlintermediate
SQL Pivot and Crosstab Queries
Transform row data into columnar reports using CASE expressions, FILTER, and crosstab patterns.
Best for: Creating monthly revenue reports
#sql#pivot