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

3-15 case式と集合関数

SQLパズル

テーブル
Val
---
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20

最小の3の倍数と、最大の3の倍数と、
最小の5の倍数と、最大の5の倍数を出力する

出力結果
最小の3の倍数   最大の3の倍数   最小の5の倍数  最大の5の倍数
-------------  -------------  -------------  -------------
           12             18             10             20


SQL

select
min(case when mod(Val,3) = 0 then Val end) as "最小の3の倍数",
max(case when mod(Val,3) = 0 then Val end) as "最大の3の倍数",
min(case when mod(Val,5) = 0 then Val end) as "最小の5の倍数",
max(case when mod(Val,5) = 0 then Val end) as "最大の5の倍数"
from (select 10 as Val from dual
union select 11 from dual
union select 12 from dual
union select 13 from dual
union select 14 from dual
union select 15 from dual
union select 16 from dual
union select 17 from dual
union select 18 from dual
union select 19 from dual
union select 20 from dual);

--■■■最小の3の倍数と最大の3の倍数のみを求めるのであれば、where句に条件を書きます
select
min(Val) as "最小の3の倍数",
max(Val) as "最大の3の倍数"
from (select 10 as Val from dual
union select 11 from dual
union select 12 from dual
union select 13 from dual
union select 14 from dual
union select 15 from dual
union select 16 from dual
union select 17 from dual
union select 18 from dual
union select 19 from dual
union select 20 from dual)
where mod(Val,3) = 0;


解説

case式と、集合関数を組み合わせると、
条件を満たす集合の中で、最大値や最小値を取得できます

decode関数、nullif関数、coalesce関数と
集合関数を組み合わせることもできます

また、文字列関数の
RegExp_Substr関数、RegExp_Replace関数、Replace関数、translate関数と
集合関数を組み合わせることもできます