Ранг в улье по количеству (столбцу) из таблицы
Если я хочу выбрать 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;