Запрос для выбора десяти самых высоких значений или самых высоких 10% из групп в таблице - PullRequest
3 голосов
/ 14 апреля 2011

У меня есть база данных большого количества пользователей, которые регистрируют, где они живут и сколько раз они заходили на сайт. Я ищу наиболее активных пользователей в каждом городе.

Я знаю, как найти одного наиболее активного пользователя в каждом городе:

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

Но было бы очень полезно найти 10 самых активных пользователей для каждого города. Или даже, что более полезно, но я подозреваю, что, возможно, это невозможно в SQL, верхние 10% с точки зрения активности.

Если бы кто-нибудь мог дать представление о том, как выполнить одну или обе задачи, я был бы очень признателен.

Я использую Navicat для подключения к серверу MySQL для этой задачи.

Ответы [ 2 ]

1 голос
/ 17 апреля 2015

если вы используете 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)) 
0 голосов
/ 14 апреля 2011

Вы можете сделать топ-10 как:

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

Я бы не хотел запускать этот запрос очень часто, потому что он будет довольно медленным, поскольку для просмотра плана объяснения потребуется файловая сортировка во временной таблице.

...