我希望从行数最多的两个用户获取所有行,即日志表中活动最多的两个用户。
我只找到了下一个解决方案:首先,获取每个用户的行数,并将其限制为2:
SELECT userid, count(*) AS n_of_rows FROM my_table GROUP BY userid LIMIT 2;
然后,从我查询数据库(例如Python)的源代码中,查询数据库以获得每个用户的行:
SELECT * FROM my_table where userid = $userid
考虑到SQL语言本身和数据库性能,它是最好的/优雅的解决方案吗?
谢谢!
发布于 2013-09-19 20:32:01
我想你要找的东西是这样的
select * from my_table where userid in
(select userid from my_table
group by userid
order by count(*) desc
limit 2)
发布于 2013-09-19 20:45:17
要获取行并保持顺序,请使用带有aggregation的join
:
select t.*
from my_table t join
(select userid, count(*) as cnt
from my_table
group by userid
order by count(*) desc
limit 2
) top2
on t.userid = top2.userid
order by top2.cnt desc, userid;
发布于 2013-09-19 20:29:09
试试这个:
SELECT TOP 2 userid, count(*) AS n_of_rows
FROM my_table
GROUP BY userid
ORDER BY count(*) desc
https://stackoverflow.com/questions/18904240
复制