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
Använd den analytiska funktionen rank
. Den kommer att tilldela en numrering baserat på ordningen count(*) desc
. Om två namn har samma antal får de samma rang, och nästa nummer hoppas över (så att du kan få rader med rang 1, 1 och 3). dense_rank
är ett alternativ som inte hoppar över nästa nummer om två rader har samma rang, (så att du skulle få 1, 1, 2), men om du bara vill ha raderna med rang 1 är det inte så stor skillnad .
Om du bara vill ha en rad, vill du att varje rad ska ha olika nummer. Använd i så fall row_number
. Förutom denna lilla men viktiga skillnad är dessa funktioner lika och kan användas på samma sätt.