カラムの値に応じて異なる結果を返す条件式の記述
CASE句を使うことでカラムの値に応じて異なる結果を返す条件式が記述できます。条件分岐を行ったり値のリストとの比較を行い、その結果に応じて異なるデータを返すことができます。ここではCASE句を使った条件式の記述方法について解説します。
CASE句を使った条件式の記述方法は大きく分けると2つの書式があります。まず1つ目の書式は次の通りです。条件を満たすかどうかを調べて値を返します。
SELECT CASE WHEN 条件式1 THEN 式1 WHEN 条件式2 THEN 式2 ELSE 式3 END FROM テーブル名;
条件式1が真の場合は式1を返し、条件式1が偽で条件式2が真の場合は式2を返し、いずれに条件式も偽の場合は式3が返されます。
具体的には次のようになります。
select case when result > 80 then 'Pass' when result > 50 then 'ReTest' else 'Fail' end from test;
このSELECT文ではtestテーブルの「result」カラムの値によって3つの異なる値を取得します。
----
では実際に試してみます。次のようなテーブルを作成しました。
create table test(name text, result integer);
このテーブルにはいくつかのデータが格納されており、そのままデータを取得した場合には次のようになります。
select * from test;
それではCASE句を使用し「result」カラムの値に応じて異なる3つのデータを合わせて取得してみます。(下記ではAS句も合わせて使用し、CASE句で取得するデータのカラムに名前「judgment」を設定しています)。
select name, result, case when result > 80 then 'Pass' when result > 60 then 'ReTest' else 'Fail' end as judgment from test;
設定した条件に応じた値を取得することができました。
続いて2つ目の書式です。複数の値と順次比較していき一致するところの値を返します。
SELECT CASE 式 WHEN 値1 THEN 式1 WHEN 値2 THEN 式2 ELSE 式3 END FROM テーブル名;
式の値が値1と等しい時は式1を返し、値2と等しい時は式2を返し、いずれにも一致しなかったときは式3が返されます。
具体的には次のようになります。
select case address when 'Tokyo' then 'Yamada' when 'Kanagawa' then 'Furuta' when 'Chiba' then 'Yamada' else 'Endo' end from user;
このSELECT文ではuserテーブルの「address」カラムの値によって異なる値を取得します。
----
では実際に試してみます。次のようなテーブルを作成しました。
create table user(name text, address text);
このテーブルにはいくつかのデータが格納されており、そのままデータを取得した場合には次のようになります。
select * from user;
それではCASE句を使用し「address」カラムの値に応じて異なるデータを合わせて取得してみます。(下記ではAS句も合わせて使用し、CASE句で取得するデータのカラムに名前「person」を設定しています)。
select name, address, case address when 'Tokyo' then 'Yamada' when 'Kanagawa' then 'Furuta' when 'Chiba' then 'Yamada' when 'Osaka' then 'Sugino' when 'Kyoto' then 'Furuta' else 'Endo' end as person from user;
設定した条件に応じた値を取得することができました。
( Written by Tatsuo Ikura )