トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-90 指定サイズを下回るまでdelete
SQLパズル
画像テーブル
画像番号 画像サイズ
-------- ----------
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 11
12 12
13 13
画像サイズの総合計が30を下回るまで、
画像番号の小さい順にレコードをdeleteする
更新結果
画像番号 画像サイズ
-------- ----------
12 12
13 13
データ作成スクリプト
create table 画像(
画像番号 number(2),
画像サイズ number(2));
insert into 画像
select RowNum,RowNum from all_catalog where RowNum <=13;
commit;
SQL
--■■■相関サブクエリを使う方法■■■
delete from 画像
where RowID not in(
select a.RowID
from 画像 a
where (select nvl(sum(b.画像サイズ),0) + a.画像サイズ
from 画像 b
where b.画像番号 > a.画像番号) < 30);
--■■■分析関数を使う方法■■■
delete from 画像
where RowID not in(
select Row_ID
from (select RowID as Row_ID,
sum(画像サイズ) over(order by 画像番号 desc) as サイズ累計
from 画像)
where サイズ累計 < 30);
解説
画像番号の降順に、
画像サイズの累計を取得してます