Отчет повторные покупки 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.

→ Ссылка