Mysql 我想统计每月进行多次购买的用户数
所以我在这里要做的是,我在计算一段时间内的重复用户(下了不止一个订单的用户)的数量,让它是月日或年,这里的情况是月 我目前运行的是mysql,我基本上是mysql的初学者,我尝试过多个子查询,但都失败了 这就是我到目前为止所尝试的 这将返回没有排序计数条件的所有用户数 由于人们要求获得样本数据,以下是目前的数据:Mysql 我想统计每月进行多次购买的用户数,mysql,sql,mariadb,Mysql,Sql,Mariadb,所以我在这里要做的是,我在计算一段时间内的重复用户(下了不止一个订单的用户)的数量,让它是月日或年,这里的情况是月 我目前运行的是mysql,我基本上是mysql的初学者,我尝试过多个子查询,但都失败了 这就是我到目前为止所尝试的 这将返回没有排序计数条件的所有用户数 由于人们要求获得样本数据,以下是目前的数据: Order_Creation_Date - User_ID - Order_ID 2019-01-01 123 1 2019-01-01
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
我认为您应该尝试这样的方法,它将按月和按年返回订购次数超过一次的用户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”列中进行计数,如果您需要一月份进行多个购买的用户数量,然后执行两级聚合:一级按用户和月份,另一级按月份:
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;
样本数据和期望的结果会有所帮助。我认为您需要按年度和月份进行分组。正如@Gordon所说的,样本数据会有很大帮助。我不知道你说你发布的查询返回了什么是什么意思,因为你没有显示它们返回了什么。你只要告诉我们,没有样本数据集的预期结果是愚蠢的。你可以看到,对吗?WeHey伙计们,添加了样本数据和样本数据的预期结果