用于从表中的组中选择最高十个值或最高10%的查询

时间:2011-04-14 19:08:43

标签: mysql sql greatest-n-per-group

我有一个包含大量用户的数据库,记录他们居住的地方以及他们登录网站的次数。我想找出每个城市中最活跃的用户。

我知道如何找到每个城市中最活跃的用户:

select user_id, city, max(login_count)
from user
group by city 

但是,能够找到每个城市的10个最活跃用户非常有用。甚至,更有用,但我怀疑在SQL中可能不可能,在活动方面排名前10%。

如果有人能够知道如何完成这两项任务,或者两项任务,我会非常感激。

我正在使用Navicat连接到MySQL服务器来执行此任务。

2 个答案:

答案 0 :(得分:1)

如果您使用的是MySql,则可以使用SELECT TOP 10 PERCENT语句。

喜欢

select top 10 percent * from (
    select user_id, city, max(login_count)
    from user
    group by user_id,city
    order by max(login_count)) 

答案 1 :(得分:0)

您可以将前10名作为:

select user_id
     , city
     , login_count
  from user
 group by user_id
     , city
 order by city
     , login_count desc
 limit 10

我不想经常运行该查询,因为它会非常慢,因为如果你要查看解释计划,就需要临时表上的文件排序。