← Назад к вопросам
SQL: Анализ повторных покупок
2.0 Middle🔥 241 комментариев
#SQL и базы данных#Метрики продукта
Условие
У вас есть таблица orders:
- order_id (integer)
- customer_id (integer)
- order_date (date)
- amount (decimal)
Проанализируйте повторные покупки:
- Сколько клиентов сделало только 1 покупку?
- Какой процент клиентов делает повторную покупку?
- Какое среднее время между покупками?
Ожидаемый результат:
Таблица с метриками: one_time_buyers, repeat_buyers, repeat_rate, avg_days_between_orders
Источник: анализ покупательского поведения
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Анализ повторных покупок
1. Один заказ
Количество клиентов, сделавших только одну покупку:
SELECT COUNT(customer_id) as one_time_buyers
FROM (SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id HAVING COUNT(*) = 1) t;
2. Повторные покупки
Процент клиентов с повторными покупками:
WITH customer_counts AS (
SELECT customer_id, COUNT(*) as cnt FROM orders GROUP BY customer_id
)
SELECT
ROUND(100.0 * SUM(CASE WHEN cnt > 1 THEN 1 ELSE 0 END) / COUNT(*), 2) as repeat_rate
FROM customer_counts;
3. Среднее время между заказами
WITH ranked AS (
SELECT customer_id, order_date, LAG(order_date) OVER (PARTITION BY customer_id ORDER BY order_date) as prev_date
FROM orders
),
intervals AS (
SELECT EXTRACT(DAY FROM (order_date - prev_date))::int as days_between
FROM ranked WHERE prev_date IS NOT NULL
)
SELECT ROUND(AVG(days_between), 1) as avg_days_between_orders
FROM intervals;
Метрики: one_time_buyers, repeat_buyers, repeat_rate, avg_days_between_orders - готовы для анализа.