トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-119 経路の総積を取得
SQLパズル
部品表テーブル
OYABUN KOBUN SUU
------ ------ ---
001000 002000 1
001000 003000 2
002000 002100 1
002000 002200 1
003000 003100 2
各レコードの、
始祖までの経路の総積を取得する。
ただし、SUUは正数のみとする。
OYABUN KOBUN SUU
------ ------ ---
001000 002000 1
001000 003000 2
002000 002100 1 ←1*2
002000 002200 1 ←1*1
003000 003100 4 ←2*2
データ作成スクリプト
create table 部品表 as
select '001000' as OYABUN,'002000' as KOBUN,1 as SUU from dual
union select '001000','003000',2 from dual
union select '002000','002100',1 from dual
union select '002000','002200',1 from dual
union select '003000','003100',2 from dual;
SQL
--■■■相関サブクエリを使う方法■■■
select oyabun,kobun,
(select round(exp(sum(Ln(b.suu)))) from 部品表 b
Start With b.RowID = a.RowID
connect by prior b.oyabun = b.kobun) as suu
from 部品表 a;
--■■■インラインビューとグループ化を組み合わせる方法■■■
select OYABUN,KOBUN,round(exp(sum(Ln(suu)))) as SUU
from (select connect_by_root OYABUN as OYABUN,
connect_by_root KOBUN as KOBUN,
suu
from 部品表
connect by prior oyabun = kobun)
group by OYABUN,KOBUN
order by OYABUN,KOBUN;
解説