トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-108 パターン数を取得
SQLパズル
ValListテーブル
ID Value
-- -----
1 A
1 B
1 C
2 B
2 C
3 A
3 B
3 C
4 A
4 B
4 D
IDから見たValueのパターン数(ABC、BC、ABD で3)と、
同一パターンを除いた、Valueの総数(3+2+3 で8)
を求める。
出力結果
pattern elements
------- --------
3 8
データ作成スクリプト
create table ValList(
ID number(1),
Value char(1));
insert into ValList values(1,'A');
insert into ValList values(1,'B');
insert into ValList values(1,'C');
insert into ValList values(2,'B');
insert into ValList values(2,'C');
insert into ValList values(3,'A');
insert into ValList values(3,'B');
insert into ValList values(3,'C');
insert into ValList values(4,'A');
insert into ValList values(4,'B');
insert into ValList values(4,'D');
commit;
SQL
select count(*) as pattern,sum(elements) as elements
from (select distinct substr(max(sys_connect_by_path(Value,',')),2),
count(*) as elements
from (select ID,Value,
Lag(RowID) over(partition by ID order by Value) as LagRowID
from ValList)
Start With LagRowID is null
connect by prior RowID = LagRowID
group by ID);
解説
distinctでパターンの重複を排除してます。