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

问题描述

| 我有一个包含大量用户数据库,记录他们的住所以及他们登录站点次数。我正在寻找每个城市中最活跃的用户。 我知道如何找到每个城市中最活跃的用户
select user_id,city,max(login_count)
from user
group by city 
但是,能够找到每个城市的10个最活跃的用户将非常有用。甚至更有用,但我怀疑在sql中可能无法实现(在活动方面排名前10%)。 如果有人可以提出如何完成一项或两项任务的想法,我将不胜感激。 我正在使用Navicat连接到MysqL服务器以完成此任务。     

解决方法

如果使用的是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)) 
    ,您可以按以下方式排名前10位:
select user_id,login_count
  from user
 group by user_id,city
 order by city,login_count desc
 limit 10
我不想经常运行该查询,因为它会非常慢,因为如果要查看说明计划,则需要在临时表上进行文件排序。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...