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
の順序に基づいて番号が割り当てられます 。 2つの名前が同じカウントを取得した場合、それらは同じランクを取得し、次の番号はスキップされます(したがって、ランク1、1、および3の行を取得する可能性があります)。 dense_rank
2つの行が同じランクになった場合に次の番号をスキップしない代替手段です(したがって、1、1、2を取得します)が、ランク1の行のみが必要な場合は、大きな違いはありません。 。
行を1つだけにする場合は、各行に異なる番号を付ける必要があります。その場合は、row_number
を使用してください 。この小さいながらも重要な違いを除けば、これらの機能は類似しており、同じように使用できます。