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

7-1 累計を取得

SQLパズル

売上テーブル
 年月    金額
------  -----
200010   1500
200011   1000
200012   2000
200101   2500
200102   3000
200103  -2000
200104   3000

売上テーブルの、年月と金額と累計を出力する。

出力結果
 年月    金額    累計
------  -----   -----
200010   1500    1500
200011   1000    2500
200012   2000    4500
200101   2500    7000
200102   3000   10000
200103  -2000    8000
200104   3000   11000


データ作成スクリプト

create Table 売上テーブル(
年月   number(6),
金額   number(4));

insert into 売上テーブル values(200010, 1500);
insert into 売上テーブル values(200011, 1000);
insert into 売上テーブル values(200012, 2000);
insert into 売上テーブル values(200101, 2500);
insert into 売上テーブル values(200102, 3000);
insert into 売上テーブル values(200103,-2000);
insert into 売上テーブル values(200104, 3000);
commit;


SQL

--■■■相関サブクエリを使用■■■
select 年月,金額,
(select sum(b.金額) from 売上テーブル b
  where b.年月 <= a.年月) as 累計
from 売上テーブル a
order by 年月;

--■■■分析関数を使用■■■
select 年月,金額,
sum(金額) over (order by 年月) as 累計
from 売上テーブル
order by 年月;

--■■■自己結合を使用■■■
select a.年月,a.金額,sum(b.金額) as 累計
from 売上テーブル a,売上テーブル b
where a.年月 >= b.年月
group by a.年月,a.金額
order by a.年月;


解説

相関サブクエリで、以前の年月の金額を合計して、累計を取得してます。
分析関数や、自己結合で取得することもできます。

CodeZine:分析関数の衝撃(中編)

8-48 累計を取得(グループごと、複数ソートキー)