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
Gebruik de analytische functie rank
. Het zal een nummering toewijzen op basis van de volgorde van count(*) desc
. Als twee namen hetzelfde aantal hebben, krijgen ze dezelfde rangorde en wordt het volgende nummer overgeslagen (u kunt dus rijen krijgen met rang 1, 1 en 3). dense_rank
is een alternatief dat het volgende nummer niet overslaat als twee rijen dezelfde rangorde hebben (je krijgt dus 1, 1, 2), maar als je alleen de rijen met rang 1 wilt, is er niet veel verschil .
Als u slechts één rij wilt, wilt u dat elke rij een ander nummer heeft. Gebruik in dat geval row_number
. Afgezien van dit kleine maar belangrijke verschil, zijn deze functies vergelijkbaar en kunnen ze op dezelfde manier worden gebruikt.