sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo seleccionar los valores que aparecen con más frecuencia?

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

Usa la función analítica rank . Asignará una numeración basada en el orden de count(*) desc . Si dos nombres obtuvieron el mismo conteo, obtienen el mismo rango y se omite el siguiente número (por lo que es posible que obtenga filas con los rangos 1, 1 y 3). dense_rank es una alternativa que no omite el siguiente número si dos filas tienen el mismo rango (por lo que obtendrías 1, 1, 2), pero si solo quieres las filas con el rango 1, no hay mucha diferencia .

Si solo quiere una fila, querrá que cada fila tenga un número diferente. En ese caso, use row_number . Aparte de esta pequeña pero importante diferencia, estas funciones son similares y se pueden usar de la misma manera.