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

10-99 合計の累計を取得

SQLパズル

金額テーブル
日付        金額
----------  ----
2006/06/10   500
2006/06/10   100
2006/06/11   200
2006/06/15   300
2006/06/15   150

日付ごとの金額の合計を求めて、
累計も求める

出力結果
日付        合計  累計
----------  ----  ----
2006/06/10   600   600
2006/06/11   200   800
2006/06/15   450  1250


データ作成スクリプト

create Table 金額テーブル(
日付 date,
金額 number(3));

insert into 金額テーブル values(to_date('20060610','yyyymmdd'),500);
insert into 金額テーブル values(to_date('20060610','yyyymmdd'),100);
insert into 金額テーブル values(to_date('20060611','yyyymmdd'),200);
insert into 金額テーブル values(to_date('20060615','yyyymmdd'),300);
insert into 金額テーブル values(to_date('20060615','yyyymmdd'),150);
commit;


SQL

--■■■分析関数を使う方法■■■
select 日付,
sum(金額) as 合計,
sum(sum(金額)) over(order by 日付) as 累計
from 金額テーブル
group by 日付
order by 日付;

--■■■相関サブクエリを使う方法■■■
select 日付,合計,
(select sum(b.金額) from 金額テーブル b
  where b.日付 <= a.日付) as 累計
from (select 日付,sum(金額) as 合計
        from 金額テーブル
      group by 日付) a
order by 日付;


解説

分析関数の引数に集合関数を使うことができます