← Назад к вопросам

SQL: Анализ повторных покупок

2.0 Middle🔥 241 комментариев
#SQL и базы данных#Метрики продукта

Условие

У вас есть таблица orders:

  • order_id (integer)
  • customer_id (integer)
  • order_date (date)
  • amount (decimal)

Проанализируйте повторные покупки:

  1. Сколько клиентов сделало только 1 покупку?
  2. Какой процент клиентов делает повторную покупку?
  3. Какое среднее время между покупками?

Ожидаемый результат:

Таблица с метриками: 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 - готовы для анализа.