トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
5-26 group by句に演算式
SQLパズル
売上テーブル
日付 数 円
---------- -- ---
2004-06-01 1 500
2004-06-10 2 500
2004-07-05 2 100
2004-08-03 1 200
2004-08-05 2 100
2004-08-06 1 100
月毎の合計を出力する。
出力結果
日付(月) 数 円
-------- -- ----
2004-06 3 1000
2004-07 2 100
2004-08 4 400
データ作成スクリプト
create Table 売上(
日付 date,
数 number(1),
円 number(3));
insert into 売上 values(to_date('20040601','yyyymmdd'),1,500);
insert into 売上 values(to_date('20040610','yyyymmdd'),2,500);
insert into 売上 values(to_date('20040705','yyyymmdd'),2,100);
insert into 売上 values(to_date('20040803','yyyymmdd'),1,200);
insert into 売上 values(to_date('20040805','yyyymmdd'),2,100);
insert into 売上 values(to_date('20040806','yyyymmdd'),1,100);
commit;
SQL
col "日付(月)" for a10
--■■■to_char関数の結果でグループ化■■■
select to_char(日付,'yyyy-mm') as "日付(月)",
sum(数) as 数,
sum(円) as 円
from 売上
group by to_char(日付,'yyyy-mm')
order by to_char(日付,'yyyy-mm');
--■■■分析関数を使用■■■
select distinct to_char(日付,'yyyy-mm') as "日付(月)",
sum(数) over(partition by to_char(日付,'yyyy-mm')) as 数,
sum(円) over(partition by to_char(日付,'yyyy-mm')) as 円
from 売上
order by to_char(日付,'yyyy-mm');
解説
group by句に演算式を使ってます。