我在网站上有一个SQLite用户操作表。每一行都是网站上的相同操作,只是不同的时间/日期,用用户ID标记。该表有超过2000万条目。我理解如何使用按用户ID的功能分组来按用户计算(即A采取动作3次,B 4,C 2,D 4等)。换句话说,这很好用:
select count(uid) as event_count
from table
group by uid
我想要的是统计分布的数据,它是仅执行1次操作的用户数量,采取2次操作的用户数量等。另一种方式:列表可能如下所示:
1 | 339,440
2 | 452,555
3 | 99,239
5 | 20,209
etc. ...
我可以使用having event_count = n
子句,只需重新运行每个整数的查询,直到所有这些都被解释,但这看起来很愚蠢。我必须有一种方法可以获得一个包含两列的列表:组大小和所有用户完全相同操作数的用户数。
答案 0 :(得分:4)
就像在上面添加另一个分组一样简单:
select event_count, count(*) as users_count
from
(select count(uid) as event_count
from table
group by uid) t
group by event_count
order by event_count