Mysql-具有唯一订阅者用户的按月分组。用户不应重复

问题描述 投票:0回答:1

我具有所有订户用户的下表。我希望按月分配唯一的订阅者用户组,但是如果用户已经订阅,则不应在计数中重复。

ID | USER   | CREATED DATE
1  | 1      | 2019-10-16
2  | 2      | 2019-10-18
3  | 3      | 2019-12-06
4  | 2      | 2020-01-01 (* This is repeated so should not be count in 01)
5  | 4      | 2020-01-05
6  | 5      | 2020-01-11
7  | 1      | 2020-02-14 (* This is repeated so should not be count in 02)
8  | 2      | 2020-03-06 (* This is repeated so should not be count in 03)
9  | 5      | 2020-03-15 (* This is repeated so should not be count in 03)

我的预期输出应为以下。用户总数为5,所以总数必须为5。

TOTAL   | MONTH
2       | 10
1       | 12
2       | 01
0       | 02
0       | 03
mysql sql group-by unique distinct
1个回答
0
投票

使用group by获得第一个月,然后再次汇总:

select year(min_cd), month(min_cd), count(*)
from (select user, min(created_date) as min_cd
      from t
      group by user
     ) u
group by year(min_cd), month(min_cd);

这不包括0值,但它们似乎有些武断。

如果您确实希望它们与数据一起使用,那么一种方法是窗口函数和条件聚合:

select year(min_cd), month(min_cd),
       sum( min_cd = created_date )
from (select user, min(created_date) over (partition by user) as min_cd
      from t
     ) u
group by year(min_cd), month(min_cd);
© www.soinside.com 2019 - 2024. All rights reserved.