トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
8-32 最大値または最小値のレコードを求める
SQLパズル
empTable
ename sal
----- ---
Ada 100
Jane 100
Tom 700
Dick 800
Wendy 900
Salが最大値または最小値のレコードを求める。
出力結果
ename sal
----- ---
Ada 100
Jane 100
Wendy 900
SQLクックブックのレシピ11.6を参考にさせていただきました
データ作成スクリプト
create table empTable(ename,sal) as
select 'Ada' ,100 from dual union all
select 'Jane' ,100 from dual union all
select 'Tom' ,700 from dual union all
select 'Dick' ,800 from dual union all
select 'Wendy',900 from dual;
SQL
--■■■分析関数を使う方法■■■
select ename,sal
from (select ename,sal,
min(sal) over() as minSal,
max(sal) over() as maxSal
from empTable)
where sal in(minSal,maxSal)
order by sal,ename;
--■■■分析関数を使わない方法■■■
select ename,sal
from empTable a
where exists(select 1 from empTable b
having a.sal in(min(b.sal),max(b.sal)))
order by sal,ename;
解説
分析関数を使わない方法では、
exists述語とhaving句を組み合わせて使ってます。