トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
5-61 その他を考慮した集計
SQLパズル
MasterTable SumTable
Code Name Code Val
---- ----- ---- ---
0 etc 0 2
1 Name1 1 4
2 Name2 3 8
3 Name3 3 16
9 32
MasterTableのCodeごとに集計する。
Code=0のデータと、
SumTableにあるが、MasterTableにないデータは、
etcとして集計する。
出力結果
Code Name SumVal
---- ----- ------
0 etc 34
1 Name1 4
2 Name2 0
3 Name3 24
データ作成スクリプト
create table MasterTable(Code,Name) as
select 0,'etc' from dual union
select 1,'Name1' from dual union
select 2,'Name2' from dual union
select 3,'Name3' from dual;
create table SumTable(Code,Val) as
select 0, 2 from dual union
select 1, 4 from dual union
select 3, 8 from dual union
select 3,16 from dual union
select 9,32 from dual;
SQL
select nvl(a.Code,0) as Code,
nvl(a.Name,'etc') as Name,
nvl(sum(b.Val),0) as Val
from MasterTable a full Join SumTable b
on (a.Code = b.Code)
group by nvl(a.Code,0),nvl(a.Name,'etc')
order by nvl(a.Code,0);
解説
完全外部結合で和集合を求めてます。
ベン図を脳内でイメージしつつ
3通りの場合わけを行うと、分かりやすいでしょう。