Отчет повторные покупки sql
Есть потребность создать отчет в котором будет фигурировать коэффициент повторных покупок.
Считается он как "количество покупателей, которые совершали более 1 покупки" / "количество всех покупателей за период" * 100
Есть таблица с полями: date, user_id, order_id, sum
Я написал такой код (см. ниже). Понимаю, что он далек от совершенства) К тому же количество купивших более 1 покупки вычисляется по указанному диапазону времени, а нужно, чтобы инфа была за все время. Не могу понять как это реализовать. Прошу помощи у гуру. Строго не судите)
SELECT
(SELECT COUNT(user_id) FROM cscart_orders WHERE (date between "2021-07-01" AND "2021-07-10")) AS purchases,
COUNT(IF(numpur > 1, user_id, NULL)) AS repeat_purchases,
COUNT(IF(numpur > 1, user_id, NULL)) / (SELECT COUNT(user_id) FROM cscart_orders WHERE (date between "2021-07-01" AND "2021-07-10")) * 100 AS repeat_purchases_rate
FROM
(SELECT user_id, COUNT(user_id) AS numpur
FROM cscart_orders
WHERE (date between "2021-07-01" AND "2021-07-10")
GROUP BY user_id) AS t
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
WITH cte AS ( SELECT user_id, COUNT(*) cnt
FROM cscart_orders
WHERE `date` between '2021-07-01' AND '2021-07-10'
GROUP BY user_id )
SELECT COUNT(*) total_purchases,
SUM(cnt > 1) repeat_purchases,
SUM(cnt > 1) / COUNT(*) * 100 repeat_purchases_rate
FROM cte
Для СУБД, отличных от MySQL, заменить SUM(cnt > 1) на соотв. CASE.