トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-289 An alternative to DISTINCT
SQLパズル
EmuDistinctテーブル
Col1 Col2
---- ----
1 A
1 A
2 A
2 A
2 B
3 C
3 C
4 C
4 C
4 D
重複行を排除した結果において、
Col1ごとで、Col2が2件以上となる、
行を出力する。
出力結果
Col1 Col2
---- ----
2 A
2 B
4 C
4 D
データ作成スクリプト
create table EmuDistinct(Col1,Col2) as
select 1,'A' from dual union all
select 1,'A' from dual union all
select 2,'A' from dual union all
select 2,'A' from dual union all
select 2,'B' from dual union all
select 3,'C' from dual union all
select 3,'C' from dual union all
select 4,'C' from dual union all
select 4,'C' from dual union all
select 4,'D' from dual;
SQL
--■■■group byで重複消しする方法■■■
select Col1,Col2
from (select Col1,Col2,
count(*) over(partition by Col1) as cnt
from EmuDistinct
group by Col1,Col2)
where cnt > 1;
--■■■Row_Number関数で重複消しする方法■■■
select Col1,Col2
from (select Col1,Col2,
Row_Number() over(partition by Col1,Col2 order by 1) as rn,
count(distinct Col2) over(partition by Col1) as disCnt
from EmuDistinct)
where rn= 1
and disCnt > 1;
--■■■distinctで重複消しする方法■■■
select distinct Col1,Col2
from (select Col1,Col2,
count(distinct Col2) over(partition by Col1) as disCnt
from EmuDistinct)
where disCnt > 1
order by Col1,Col2;
解説