Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como selecionar os valores que aparecem com mais frequência?

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.