Analyzing Business Data in SQL
Michel Semaan
Data Scientist
WITH maus AS ( SELECT DATE_TRUNC('month', order_date) :: DATE AS delivr_month, COUNT(DISTINCT user_id) AS mau FROM orders GROUP BY delivr_month),
maus_lag AS ( SELECT delivr_month, mau, COALESCE( LAG(mau) OVER (ORDER BY delivr_month ASC), 1) AS last_mau FROM maus)
Query
WITH maus AS (...),
maus_lag AS (...)
SELECT
delivr_month,
mau,
mau - last_mau AS mau_delta
FROM maus_lag
ORDER BY delivr_month
LIMIT 3;
Result
delivr_month mau mau_delta
------------ --- ---------
2018-06-01 123 1
2018-07-01 226 103
2018-08-01 337 111
Query
WITH maus AS (...),
maus_lag AS (...)
SELECT
delivr_month,
mau,
ROUND(
(mau - last_mau) :: NUMERIC / last_mau,
2) AS growth
FROM maus_lag
ORDER BY delivr_month
LIMIT 3;
Result
delivr_month mau growth
------------ --- ------
2018-06-01 123 122.00
2018-07-01 226 0.84
2018-08-01 337 0.49
Analyzing Business Data in SQL