我想计算按月分组的多次购买的用户数量

时间:2019-05-14 00:38:23

标签: mysql sql mariadb

所以我要在这里做的是,我要计算一段时间内的重复用户(完成一个以上订单的用户)的数量,请以月日或年为例这是几个月

我当前正在运行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 :(得分:0)

如果您希望一月份进行一次以上购买的用户数量,则进行两个级别的汇总:一个按用户和月份进行汇总,另一个按月份进行:

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;

答案 1 :(得分:-1)

我认为您应该尝试这样的操作,该操作将按月和年返回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”列上进行计数