Ранг в улье по количеству (столбцу) из таблицы - PullRequest
0 голосов
/ 08 декабря 2018

Если я хочу выбрать count(user_name), country из таблицы в улье.Какую команду я должен использовать, чтобы получить результат в топ-2 страны для большинства user_name?

Как использовать функцию ранга?

id | user_name | country
 1 | a         | UK
 2 | b         | US
 3 | c         | AUS
 4 | d         | ITA
 5 | e         | UK
 6 | f         | US

результат должен быть:

rank| num_user_name | country
 1  | 2             | US
 1  | 2             | UK
 2  | 1             | ITA
 2  | 1             | AUS

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Подзапрос не требуется:

select dense_rank() over (order by count(*)) as rank,
       country, 
       count(*) as num_user_name
from t
group by country
order by count(*) desc, country;
0 голосов
/ 08 декабря 2018

Вы можете использовать аналитическую функцию dense_rank:

with cte as (
    select   country, 
             count(user_name) as num_user_name
    from     tbl
    group by country
), cte2 as (
    select   dense_rank() over (order by num_user_name desc) as ranked,
             num_user_name,
             country
    from     cte
)
select   ranked,
         num_user_name,
         country
from     cte2
where    ranked <= 2
order by 1
...