with test as(
select 'name1' as name from dual
union all select 'name1' from dual
union all select 'name1' from dual
union all select 'name2' from dual
union all select 'name3' from dual
union all select 'name3' from dual
union all select 'name3' from dual
union all select 'name3' from dual
union all select 'name4' from dual
union all select 'name4' from dual
union all select 'name4' from dual
union all select 'name4' from dual
union all select 'name4' from dual
union all select 'name4' from dual
union all select 'name5' from dual
union all select 'name5' from dual)
select decode(grouping(name),1,'合計',name) as name,
sum(カウント) as カウント
from (select count(*) as カウント,
case when dense_Rank() over(order by count(*) desc) > 2
then 'その他' else name end as name
from test
group by name) a
group by rollup(name)
order by grouping(a.name),decode(a.name,'その他',1,0),カウント desc;