トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-117 下位10%のデータを取得
SQLパズル
テーブル
識別ID
------
2
4
6
8
10
12
14
16
18
20
22
24
識別IDの下位10%を出力する(識別IDはユニーク)
テーブルのレコード数が10の倍数でない場合は、
テーブルのレコード数を10で割って、
小数部を切り上げた件数だけ出力する(12件の場合は、2件出力)
出力結果
識別ID
------
2
4
SQL
--■■■Row_Number関数を使う方法■■■
select 識別ID
from (select 識別ID,
Row_Number() over(order by 識別ID) as Rank,
count(*) over() as RecordCount
from (select RowNum*2 as 識別ID
from all_catalog
where RowNum <=12))
where Rank <= ceil(RecordCount/10);
--■■■NTile関数を使う方法■■■
select 識別ID
from (select 識別ID,
NTile(10) over(order by 識別ID) as bucket
from (select RowNum*2 as 識別ID
from all_catalog
where RowNum <=12))
where bucket = 1;
解説
NTile関数を使うと、
バケット番号を割り当てることができます。