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.