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
Използвайте аналитичната функция rank
. Той ще присвои номериране въз основа на реда на count(*) desc
. Ако две имена имат еднакъв брой, те получават еднакъв ранг и следващото число се пропуска (така че може да получите редове с ранг 1, 1 и 3). dense_rank
е алтернатива, която не пропуска следващото число, ако два реда имат еднакъв ранг (така че ще получите 1, 1, 2), но ако искате само редовете с ранг 1, няма голяма разлика .
Ако искате само един ред, бихте искали всеки ред да има различен номер. В такъв случай използвайте row_number
. Освен тази малка, но важна разлика, тези функции са подобни и могат да се използват по един и същи начин.