Ранг в улье по количеству (столбцу) из таблицы

Если я хочу выбрать 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 ответа

Решение

Вы могли бы использовать 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

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

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;
Другие вопросы по тегам