select
x.last_name,
x.name_count
from
(select
u.last_name,
count(*) as name_count,
rank() over (order by count(*) desc) as rank
from
users u
group by
u.last_name) x
where
x.rank = 1
Use a função analítica
rank
. Ele atribuirá uma numeração com base na ordem de count(*) desc
. Se dois nomes tiverem a mesma contagem, eles terão a mesma classificação e o próximo número será ignorado (assim você pode obter linhas com as classificações 1, 1 e 3). dense_rank
é uma alternativa que não pula o próximo número se duas linhas tiverem a mesma classificação (então você obteria 1, 1, 2), mas se você quiser apenas as linhas com classificação 1, não há muita diferença . Se você quiser apenas uma linha, você deseja que cada linha tenha um número diferente. Nesse caso, use
row_number
. Além dessa pequena, mas importante diferença, essas funções são semelhantes e podem ser usadas da mesma maneira.