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

7-19 レコードがあれば最大値を取得

SQLパズル

Ageテーブルにレコードが存在したらAgeの最大値を取得する。
Ageテーブルにレコードが存在しない場合は、行を返さない(取得行が0行)


SQL

--■■■Ageテーブルにレコードが存在しない場合(havingを使用)■■■
with Ageテーブル as (select 10 as age from dual where RowNum=0)
select max(age) as MaxAge from Ageテーブル
having count(*) >=1;

--■■■Ageテーブルにレコードが存在しない場合(分析関数を使用)■■■
with Ageテーブル as (select 10 as age from dual where RowNum=0)
select distinct max(age) over() as MaxAge from Ageテーブル;

--■■■Ageテーブルにレコードが存在する場合(havingを使用)■■■
with Ageテーブル as (select 10 as age from dual union select 20 from dual)
select max(age) as MaxAge from Ageテーブル
having count(*) >=1;

--■■■Ageテーブルにレコードが存在する場合(分析関数を使用)■■■
with Ageテーブル as (select 10 as age from dual union select 20 from dual)
select distinct max(age) over() as MaxAge from Ageテーブル;


解説

having句で件数をチェックして、0件の場合に、行を返さないようする方法や、
分析関数を使う方法があります。