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

5-59 データ件数と、上位N件を出力

SQLパズル

CutTable
Val
---
100
 95
 80
 60
 40
 30
 20
 10

CutTableのデータ件数を列に表示し、
Valの降順に5レコード出力する。

プライマリキーは、Valとする。

出力結果
Val  Records
---  -------
100        8
 95        8
 80        8
 60        8
 40        8


データ作成スクリプト

create table CutTable(
Val number(3) primary key);

insert into CutTable
select 100 from dual
union select 95 from dual
union select 80 from dual
union select 60 from dual
union select 40 from dual
union select 30 from dual
union select 20 from dual
union select 10 from dual;
commit;


SQL

--■■■Row_Number関数を使う方法■■■
select Val,Records
from (select Val,
      Row_Number() over(order by Val desc) as Rank,
      count(*) over() as Records
      from CutTable)
where Rank <= 5;

--■■■インラインビューでorder byを使う方法■■■
select Val,Records
from (select Val,
      count(*) over() as Records
      from CutTable
      order by Val desc)
where RowNum <= 5;


解説

count関数で、レコード数を求めてます。