カラムの値に応じて異なる結果を返す条件式の記述

広告

CASE句を使うことでカラムの値に応じて異なる結果を返す条件式が記述できます。条件分岐を行ったり値のリストとの比較を行い、その結果に応じて異なるデータを返すことができます。ここではCASE句を使った条件式の記述方法について解説します。

1.条件分岐
2.値のリストとの比較

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);

p13-1

このテーブルにはいくつかのデータが格納されており、そのままデータを取得した場合には次のようになります。

select * from test;

p13-2

それでは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;

p13-3

設定した条件に応じた値を取得することができました。

続いて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);

p13-4

このテーブルにはいくつかのデータが格納されており、そのままデータを取得した場合には次のようになります。

select * from user;

p13-5

それでは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;

p13-6

設定した条件に応じた値を取得することができました。

SQLite入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)