トップページに戻る
次の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 日付;
解説
分析関数の引数に集合関数を使うことができます