Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我想统计每月进行多次购买的用户数_Mysql_Sql_Mariadb - Fatal编程技术网

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

所以我在这里要做的是,我在计算一段时间内的重复用户(下了不止一个订单的用户)的数量,让它是月日或年,这里的情况是月

我目前运行的是mysql,我基本上是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

我认为您应该尝试这样的方法,它将按月和按年返回订购次数超过一次的用户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伙计们,添加了样本数据和样本数据的预期结果