WITH cohort_data AS (
SELECT user_id,
EXTRACT(MONTH FROM CAST(paid_at AS date)) AS purchase_month,
MIN(EXTRACT(MONTH FROM CAST(paid_at AS date))) OVER(PARTITION BY user_id) AS first_purchase_month
FROM tools_shop.orders
WHERE DATE_TRUNC('month', paid_at) BETWEEN '2020-01-01' AND '2020-12-31'
)
SELECT first_purchase_month,
purchase_month,
COUNT(DISTINCT user_id) AS unique_users
FROM cohort_data
GROUP BY first_purchase_month, purchase_month
ORDER BY first_purchase_month, purchase_month;
Этот код группирует данные по когорте (месяц первой покупки) и месяцу покупки и подсчитывает число уникальных пользователей в каждой группе. Вы можете использовать эти данные для расчета коэффициента удержания.
Месяц первой покупки играет роль когорты. Кроме того, высчитав месяц покупки, можно считать пользователей. Положите предыдущий код в WITH или подзапрос. Сгруппируйте данные по когорте и месяцу покупки и подсчитайте число уникальных пользователей. Первым в группировке должен идти месяц первой покупки, потом месяц покупки. Помните, что считать нужно только уникальных клиентов.
КОД ОТ ПРЕДЫДУЩЕЙ ЗАДАЧИ:
SELECT user_id, EXTRACT(MONTH FROM CAST(paid_at AS date)),
MIN(EXTRACT(MONTH FROM CAST(paid_at AS date))) OVER(PARTITION BY user_id) AS date
FROM tools_shop.orders
WHERE DATE_TRUNC('month', paid_at) BETWEEN '2020-01-01' AND '2020-12-31'