トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
3-25 組み合わせの数を取得
SQLパズル
TableA
ID Name Address
-- ---------- -------
1 サンディ AddA
2 ハイディ AddB
3 ウェンディ AddC
TableB
ID Data1 Data2
-- ----- -----
1 aaa bbb
1 aaa bbb
1 aaa ccc
2 aaa bbb
2 bbb ccc
2 ccc ddd
TableAのIDに紐づく
TableBのData1とData2の組み合わせの数(重複を除く)
を取得する
出力結果
ID Name Address DistinctCount
-- ---------- ------- -------------
1 サンディ AddA 2
2 ハイディ AddB 3
3 ウェンディ AddC 0
データ作成スクリプト
create table TableA(
ID number(1),
Name varchar2(10),
Address char(4));
insert into TableA values(1,'サンディ','AddA');
insert into TableA values(2,'ハイディ','AddB');
insert into TableA values(3,'ウェンディ','AddC');
create table TableB(
ID number(1),
Data1 char(3),
Data2 char(3));
insert into TableB values(1,'aaa','bbb');
insert into TableB values(1,'aaa','bbb');
insert into TableB values(1,'aaa','ccc');
insert into TableB values(2,'aaa','bbb');
insert into TableB values(2,'bbb','ccc');
insert into TableB values(2,'ccc','ddd');
commit;
SQL
--■■■distinctを使う方法■■■
select a.ID,a.Name,a.Address,
(select count(*)
from (select distinct ID,Data1,Data2 from TableB) b
where b.ID=a.ID) as DistinctCount
from TableA a
order by ID;
--■■■集合関数をネストさせる方法■■■
select a.ID,a.Name,a.Address,
(select count(count(*))
from TableB b
where b.ID=a.ID
group by Data1,Data2) as DistinctCount
from TableA a
order by ID;
解説
distinctで重複を排除する方法と、
group byで重複を排除する方法があります