トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-7 累計が100以上になるまで出力(負数なし)
SQLパズル
GetPointテーブル
ID Point
-- -----
1 30
2 30
3 30
4 20
5 70
6 5
7 0
8 18
9 33
GetPointテーブルからIDの昇順にPointの合計が100以上になるまで
IDとPointを出力する。
Pointに負数は存在しない(Pointの累計は、IDに対して単調増加である)
出力例
ID Point
-- -----
1 30
2 30
3 30
4 20
データ作成スクリプト
create table GetPoint(
ID number(1),
Point number(2),
Primary key(ID));
insert into GetPoint values(1,30);
insert into GetPoint values(2,30);
insert into GetPoint values(3,30);
insert into GetPoint values(4,20);
insert into GetPoint values(5,70);
insert into GetPoint values(6, 5);
insert into GetPoint values(7, 0);
insert into GetPoint values(8,18);
insert into GetPoint values(9,33);
commit;
SQL
--■■■相関サブクエリを使う方法■■■
select ID,Point
from GetPoint a
where (select nvl(sum(b.Point),0) from GetPoint b
where b.ID < a.ID) < 100
order by ID;
--■■■分析関数を使う方法1■■■
select ID,Point
from (select ID,Point,Lag(累計,1,0) over(order by ID) as Lag累計
from (select ID,Point,sum(Point) over(order by ID) as 累計
from GetPoint))
where Lag累計 < 100
order by ID;
--■■■分析関数を使う方法2■■■
select ID,Point
from (select ID,Point,sum(Point) over(order by ID) as 累計
from GetPoint)
where 累計 - Point < 100
order by ID;
解説
自分よりIDが小さいレコードの、
Pointの総合計が100未満であれば出力してます。