Analyzing Business Data in SQL
Michel Semaan
Data Scientist
WITH kpis AS (
SELECT
SUM(meal_price * order_quantity) AS revenue,
COUNT(DISTINCT user_id) AS users
FROM meals
JOIN orders ON meals.meal_id = orders.meal_id)
SELECT
ROUND(
revenue :: NUMERIC / GREATEST(users, 1),
2) AS arpu
FROM kpis;
WITH kpis AS ( SELECT DATE_TRUNC('month', order_date) AS delivr_month, SUM(meal_price * order_quantity) AS revenue, COUNT(DISTINCT user_id) AS users FROM meals JOIN orders ON m.meal_id = o.meal_id GROUP BY delivr_month)
SELECT delivr_month, ROUND( revenue :: NUMERIC / GREATEST(users, 1), 2) AS arpu FROM kpis ORDER BY delivr_month ASC;
WITH user_revenues AS (
SELECT
user_id,
SUM(meal_price * order_quantity) AS revenue
FROM meals
JOIN orders ON meals.meal_id = orders.meal_id
GROUP BY user_id)
SELECT
ROUND(AVG(revenue) :: NUMERIC, 2) AS arpu
FROM user_revenues;
First way
revenue users
--------- -----
260226.75 1304
Second way
user_id revenue
------- -------
0 262.75
1 160.5
2 255.25
arpu
------
199.56
Analyzing Business Data in SQL