トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
5-34 インラインビューでdistinct
SQLパズル
fooテーブル
hoge fuga hige moe
---- ---- ---- ---
1 3 5 6
1 3 4 5
1 3 5 8
1 5 5 5
hoge fuga higeが3つとも同じレコードについては、まとめて1レコードとみなし、
fooテーブルに何レコードあるか調べる(この場合は、1行目と3行目を同じとみなし、レコード数は3)
出力結果
件数
----
3
データ作成スクリプト
create Table foo(
hoge number(1),
fuga number(1),
hige number(1),
moe number(1),
primary key(hoge,fuga,hige,moe));
insert into foo values(1,3,5,6);
insert into foo values(1,3,4,5);
insert into foo values(1,3,5,8);
insert into foo values(1,5,5,5);
commit;
SQL
--■■■集合関数のネストを使用■■■
select count(count(*)) as 件数 from foo
group by hoge,fuga,hige;
--■■■インラインビューでdistinctを使用■■■
select count(*) as 件数 from
(select distinct hoge,fuga,hige from foo);
--■■■分析関数を使用■■■
select max(Rank) as 件数
from (select dense_rank() over(order by hoge,fuga,hige) as Rank from foo);
解説
distinctで重複をなくす方法や、group byで重複をなくす方法があります。