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
Použijte analytickou funkci rank
. Přiřadí číslování na základě pořadí count(*) desc
. Pokud mají dvě jména stejný počet, dostanou stejnou hodnost a další číslo je přeskočeno (takže můžete získat řádky s hodnostmi 1, 1 a 3). dense_rank
je alternativa, která nepřeskočí další číslo, pokud dva řádky mají stejné pořadí (takže byste dostali 1, 1, 2), ale pokud chcete pouze řádky s pořadím 1, není velký rozdíl .
Pokud chcete pouze jeden řádek, budete chtít, aby každý řádek měl jiné číslo. V takovém případě použijte row_number
. Kromě tohoto malého, ale důležitého rozdílu jsou tyto funkce podobné a lze je používat stejným způsobem.