トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-3 RowNum指定によるCountStop
SQLパズル
Googleテーブルの重要度の順位が900以上920以下のデータを重要度の降順に表示する。
Googleテーブルのプライマリキーは重要度とする。
Googleテーブルには、1万件のデータがある。
データ作成スクリプト
create table Googleテーブル(
重要度 number(5),
紹介文 char(11),
primary key(重要度));
begin
for i in 1..10000 loop
insert into Googleテーブル values(i,'紹介文' || to_char(i));
end loop;
commit;
end;
/
SQL
--■■■相関サブクエリを使う方法■■■
select 重要度,紹介文
from Googleテーブル a
where (select count(b.重要度)+1 from Googleテーブル b
where b.重要度 > a.重要度
and RowNum <= 920) between 900 and 920
and RowNum <= (920-900)+1
order by 重要度 desc;
--■■■インラインビューでソートする方法■■■
select 重要度,紹介文 from(
select 重要度,紹介文,RowNum as Rank from(
select 重要度,紹介文 from Googleテーブル order by 重要度 desc))
where Rank between 900 and 920
and RowNum <= (920-900)+1
order by 重要度 desc;
--■■■分析関数を使う方法■■■
select 重要度,紹介文 from(
select 重要度,紹介文,Row_Number() over(order by 重要度 desc) as Rank
from Googleテーブル)
where Rank between 900 and 920
and RowNum <= (920-900)+1
order by 重要度 desc;
解説
相関サブクエリを使う方法では、
サブクエリのwhere句でのRowNum <= 920 によって、
921位以降は正確な順位を求めない(全て921位とみなす)ようになってます。
全ての方法で、外側のクエリでのRowNum <= (920-900)+1 によって、
21件のデータを取得したら処理を打ち切って、パフォーマンスを向上させてます。
where句でのRowNum <= (920-900)+1は、植木算の考え方を使ってます。
RowNum指定によるCountStop
算数道場 8・文章題 2・植木算_その1
植木算
「植木算」で何を学ぶのか?
植木算の公式