Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie wähle ich die am häufigsten vorkommenden Werte aus?

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

Verwenden Sie die analytische Funktion rank . Es weist eine Nummerierung basierend auf der Reihenfolge von count(*) desc zu . Wenn zwei Namen die gleiche Anzahl haben, erhalten sie den gleichen Rang, und die nächste Zahl wird übersprungen (so dass Sie möglicherweise Zeilen mit den Rängen 1, 1 und 3 erhalten). dense_rank ist eine Alternative, die die nächste Zahl nicht überspringt, wenn zwei Zeilen den gleichen Rang haben (also 1, 1, 2), aber wenn Sie nur die Zeilen mit Rang 1 wollen, gibt es keinen großen Unterschied .

Wenn Sie nur eine Zeile möchten, möchten Sie, dass jede Zeile eine andere Nummer hat. Verwenden Sie in diesem Fall row_number . Abgesehen von diesem kleinen, aber wichtigen Unterschied sind diese Funktionen ähnlich und können auf die gleiche Weise verwendet werden.