Common table expressions support extracting portions of larger queries. For example:
WITH sales AS(SELECT
orders.ordered_at,
orders.user_id,SUM(orders.amount)AS total
FROM orders
GROUPBY orders.ordered_at, orders.user_id
)SELECT
sales.ordered_at,
sales.total,
users.name
FROM sales
JOIN users USING(user_id)
Traversing tree using WITH RECURSIVE
createtable empl (
name textprimarykey,
boss textnullreferences name
onupdatecascadeondeletecascadedefaultnull);insertinto empl values('Paul',null);insertinto empl values('Luke','Paul');insertinto empl values('Kate','Paul');insertinto empl values('Marge','Kate');insertinto empl values('Edith','Kate');insertinto empl values('Pam','Kate');insertinto empl values('Carol','Luke');insertinto empl values('John','Luke');insertinto empl values('Jack','Carol');insertinto empl values('Alex','Carol');with recursive t(level,path,boss,name)as(select0,name,boss,name from empl where boss isnullunionselectlevel+1,
path ||' > '|| empl.name,
empl.boss,
empl.name
from
empl join t
on empl.boss = t.name
)select*from t orderby path;