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

10-81 distinct後のグループごとの件数を取得

SQLパズル

TableA
ColA  ColB
----  ----
 111   100
 111   100
 111   200
 222   100
 222   100
 222   200
 222   300
 222   300

重複行を削除した後の、
ColAでグループ化した場合の件数を取得する。

出力結果
ColA  ColB  GroupCount
----  ----  ----------
 111   100           2
 111   200           2
 222   100           3
 222   200           3
 222   300           3


データ作成スクリプト

create table TableA(
ColA number(3),
ColB number(3));

insert into TableA values(111,100);
insert into TableA values(111,100);
insert into TableA values(111,200);
insert into TableA values(222,100);
insert into TableA values(222,100);
insert into TableA values(222,200);
insert into TableA values(222,300);
insert into TableA values(222,300);
commit;


SQL

--■■■分析関数を使う方法■■■
select distinct ColA,ColB,
count(distinct ColB) over(partition by ColA) as GroupCount
  from TableA
order by ColA,ColB;

--■■■相関サブクエリを使う方法■■■
select distinct ColA,ColB,
(select count(distinct b.ColB)
   from TableA b
  where b.ColA = a.ColA) as GroupCount
from TableA a
order by ColA,ColB;


解説

count関数にdistinctを指定して、
重複を削除してカウントしてます