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 funzione analitica rank
. Assegnerà una numerazione in base all'ordine di count(*) desc
. Se due nomi hanno lo stesso conteggio, ottengono lo stesso rango e il numero successivo viene saltato (quindi potresti ottenere righe con ranghi 1, 1 e 3). dense_rank
è un'alternativa che non salta il numero successivo se due righe hanno lo stesso rango, (quindi otterresti 1, 1, 2), ma se vuoi solo le righe con rango 1, non c'è molta differenza .
Se vuoi solo una riga, vorresti che ogni riga avesse un numero diverso. In tal caso, usa row_number
. A parte questa piccola ma importante differenza, queste funzioni sono simili e possono essere utilizzate allo stesso modo.