トップページに戻る
次の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を指定して、
重複を削除してカウントしてます