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
Użyj funkcji analitycznej rank
. Przypisze numerację na podstawie kolejności count(*) desc
. Jeśli dwa nazwiska mają taką samą liczbę, otrzymują tę samą rangę, a następna liczba jest pomijana (więc możesz otrzymać wiersze o randze 1, 1 i 3). dense_rank
jest alternatywą, która nie pomija następnej liczby, jeśli dwa wiersze mają tę samą rangę (więc otrzymasz 1, 1, 2), ale jeśli chcesz tylko wiersze z pozycją 1, nie ma dużej różnicy .
Jeśli chcesz mieć tylko jeden wiersz, chciałbyś, aby każdy wiersz miał inny numer. W takim przypadku użyj row_number
. Oprócz tej małej, ale ważnej różnicy, te funkcje są podobne i mogą być używane w ten sam sposób.