Я хотел бы посчитать количество пользователей, сделавших несколько покупок, сгруппированных по месяцам. - PullRequest
0 голосов
/ 14 мая 2019

Итак, что я пытаюсь сделать здесь, это то, что я пытаюсь подсчитать количество повторных пользователей (пользователей, которые сделали более одного заказа) за период времени, пусть это будет месяц, день или год, случай вот месяцы

В настоящее время я использую mysql mariadb, и я в значительной степени новичок в mysql, я пробовал несколько подзапросов, но все до сих пор не работали

Это то, что я пробовал до сих пор ..

Возвращает все количество пользователей без условия подсчета заказов

Поскольку люди запрашивают образцы данных, вот как эти данные выглядят в данный момент:

Order_Creation_Date - User_ID - Order_ID

2019-01-01              123         1
2019-01-01              123         2
2019-01-01              231         3
2019-01-01              231         4

Это запрос, который я использую для получения результата, но он продолжает возвращать общее количество пользователей в течение месяца

select month(o.created_at)month,
year(o.created_at)year,
count(distinct o.user_uuid) from orders o
group by month(o.created_at)
having count(*)>1

и это возвращает количество пользователей как 1 ..

select month(o.created_at)month,
year(o.created_at)year,
(select count(distinct ord.user_uuid) from orders ord
 where ord.user_uuid = o.user_uuid 
 group by ord.user_uuid
 having count(*)>1) from orders o
group by month(o.created_at)

Ожидаемый результат будет из данных образца выше

Month Count of repeat users
1              2

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Если вы хотите, чтобы количество пользователей, совершивших более одной покупки в январе, делало два уровня агрегации: один по пользователю и месяцу, а другой по месяцу:

select yyyy, mm, sum( num_orders > 1) as num_repeat_users
from (select year(o.created) as yyyy, month(o.created) as mm,
             o.user_uuid, count(*) as num_orders
      from orders o
      group by yyyy, mm, o.user_uuid
     ) o
group by yyyy, mm;
0 голосов
/ 14 мая 2019

Я думаю, вы должны попробовать что-то вроде этого, которое будет возвращать список USer_ID по месяцам и годам, которые заказывали более одного раза за период-

SELECT 
[user_uuid],
MONTH(o.created_at) month, 
YEAR(o.created_at) year, 
COUNT(o.user_uuid)
FROM orders o
GROUP BY 
MONTH(o.created_at),YEAR(o.created_at)
HAVING COUNT(*) > 1;

Более подробно, если вы ищете счетчик, который какмногие пользователи разместили более одного заказа, вы можете просто разместить вышеупомянутый запрос как подзапрос и сделать подсчет в столбце 'user_uuid'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...