我有很多看起来像这样的表:(id,user_id,object_id).我经常对"有多少用户有一个对象?有多少有两个?等"的问题感兴趣 并希望看到分布.
对此的明显答案如下:
select x.ucount, count(*)
from (select count(*) as ucount from objects_users group by user_id) as x
group by x.ucount
order by x.ucount;
Run Code Online (Sandbox Code Playgroud)
这会产生如下结果:
ucount | count
-------|-------
1 | 15
2 | 17
3 | 23
4 | 104
5 | 76
7 | 12
Run Code Online (Sandbox Code Playgroud)
在这里使用子查询对我来说感觉不优雅,我想知道如何在没有的情况下产生相同的结果.此外,如果您要问的问题稍微复杂一点,那么将更多信息传递出子查询会变得更加混乱.例如,如果您希望按用户的创建日期进一步分组数据:
select
x.ucount,
(select cdate from users where id = x.user_id) as cdate,
count(*)
from (
select user_id, count(*) as ucount
from objects_users group by user_id
) as x
group by cdate, x.ucount, …Run Code Online (Sandbox Code Playgroud)