AdvancedCTEs & Recursive
CTE: calculate running percentile by date
The query
SQL
WITH daily_orders AS (
SELECT
order_date::DATE AS d,
COUNT(*) AS order_count
FROM orders GROUP BY order_date::DATE
),
ranked AS (
SELECT
d,
order_count,
ROUND(PERCENT_RANK() OVER (ORDER BY order_count) * 100, 1) AS percentile,
ROUND(CUME_DIST() OVER (ORDER BY order_count) * 100, 1) AS cum_dist
FROM daily_orders
)
SELECT d, order_count, percentile, cum_dist
FROM ranked
WHERE d >= CURRENT_DATE - 90
ORDER BY d;Note
“PERCENT_RANK: fraction below current row. CUME_DIST: fraction <= current row. Subtle but important difference.