所以我要在这里做的是,我要计算一段时间内的重复用户(完成一个以上订单的用户)的数量,请以月日或年为例这是几个月
我当前正在运行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
答案 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”列上进行计数