トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

6-9 レコード数上位2件/その他/全体を出力

SQLパズル

testテーブル
 name
-----
name1
name1
name1
name2
name3
name3
name3
name3
name4
name4
name4
name4
name4
name4
name5
name5

name別の件数の上位2件(dense_Rankで順位付け)と、その他、全体を出力する。

出力結果
name     カウント
------   --------
name4           6
name3           4
その他          6
合計           16


SQL

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;


解説

dense_Rank関数で、
count(*)の降順に順位を付けてます。