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

10-82 金額の山分け

SQLパズル

案件情報テーブル
案件ID  案件   金額  担当者
------  ----  -----  ------
     1   ABC  10000  田中
     2   DER   2000  山田
     3   TIK  50000  山本
     4   IUY  45000  鈴木
     5   ZZZ  30000  ほげ

サポートテーブル
案件ID  サポート者
------  ----------
     1  川北
     2  金田
     3  小林
     3  村上
     3  矢島
     4  西村
     4  梅川

案件情報の金額を、
サポートした人で山分けした金額を取得する

出力結果
案件ID  案件   金額  担当者   山分け額
------  ----  -----  ------  --------
     1   ABC  10000  田中        5000
     2   DER   2000  山田        1000
     3   TIK  50000  山本       12500
     4   IUY  45000  鈴木       15000
     5   ZZZ  30000  ほげ       30000


データ作成スクリプト

create table 案件情報(
案件ID number(1),
案件   char(3),
金額   number(5),
担当者 char(4));

insert into 案件情報 values(1,'ABC',10000,'田中');
insert into 案件情報 values(2,'DER', 2000,'山田');
insert into 案件情報 values(3,'TIK',50000,'山本');
insert into 案件情報 values(4,'IUY',45000,'鈴木');
insert into 案件情報 values(5,'ZZZ',30000,'ほげ');

create table サポート(
案件ID     number(1),
サポート者 char(4));

insert into サポート values(1,'川北');
insert into サポート values(2,'金田');
insert into サポート values(3,'小林');
insert into サポート values(3,'村上');
insert into サポート values(3,'矢島');
insert into サポート values(4,'西村');
insert into サポート values(4,'梅川');
commit;


SQL

select 案件ID,案件,金額,担当者,
金額/ (select 1+count(*) from サポート b
        where b.案件ID = a.案件ID) as 山分け額
from 案件情報 a;


解説

相関サブクエリで、
サポートした人の人数を取得してます