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

7-58 nvl関数でグループ化

SQLパズル

fooテーブル
refno1  refno2  val
------  ------  ---
     1    null  100
     2       1   50
     3    null  400
     4    null  200
     5    null  500
     6       5  250
     7       5  100
     8    null  300

fooテーブルを以下のように集計する。

出力結果
refno1  sum(val)
------  --------
     1      150
     3      400
     4      200
     5      850
     8      300


データ作成スクリプト

create table foo(
refno1 number(1),
refno2 number(1),
val    number(3));

insert into foo values(1,null,100);
insert into foo values(2,   1, 50);
insert into foo values(3,null,400);
insert into foo values(4,null,200);
insert into foo values(5,null,500);
insert into foo values(6,   5,250);
insert into foo values(7,   5,100);
insert into foo values(8,null,300);
commit;


SQL

select nvl(refno2,refno1) as refno1,
sum(val) as "sum(val)"
from foo
group by nvl(refno2,refno1)
order by refno1;


解説

nvl関数でグループ化してます。