SQL — patterns I reach for¶
Window functions¶
-- Running total
SELECT date, amount,
SUM(amount) OVER (ORDER BY date) AS running_total
FROM transactions;
-- Rank within group
SELECT user_id, score,
RANK() OVER (PARTITION BY cohort ORDER BY score DESC) AS rk
FROM students;
Recursive CTEs¶
WITH RECURSIVE numbers(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM numbers WHERE n < 100
)
SELECT n FROM numbers;
Traversing a tree:
WITH RECURSIVE descendants AS (
SELECT id, parent_id, name FROM categories WHERE id = 42
UNION ALL
SELECT c.id, c.parent_id, c.name
FROM categories c
JOIN descendants d ON c.parent_id = d.id
)
SELECT * FROM descendants;