トップページに戻る    次の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句に演算式を使ってます。