SQLite | データの検索 | CASE式で条件に応じた値を返す
CASE式は条件やカラム値に応じて異なる値を返します。ここでは2つの形式を説明します。
CASE式で条件分岐する
主な形式は2つあります。最初の形式は条件を評価し、最初に真となった結果を返します。
SELECT
CASE
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2
ELSE 結果3
END
FROM テーブル名;
条件1が真なら結果1、そうでなく条件2が真なら結果2、すべて偽ならELSEの結果を返します。
–
例として次のテーブルを作成します。
create table exam (name text, result integer);
sqlite> create table exam (name text, result integer);
sqlite>
テーブルにデータを追加します。
insert into exam values ('devkuma', 85);
insert into exam values ('kimkc', 54);
insert into exam values ('araikuma', 78);
insert into exam values ('happykuma', 98);
insert into exam values ('mykuma', 48);
insert into exam values ('raccoon', 68);
sqlite> insert into exam values ('devkuma', 85);
sqlite> insert into exam values ('kimkc', 54);
sqlite> insert into exam values ('araikuma', 78);
sqlite> insert into exam values ('happykuma', 98);
sqlite> insert into exam values ('mykuma', 48);
sqlite> insert into exam values ('raccoon', 68);
sqlite>
resultに応じて3種類の値を返し、結果カラムをjudgmentとします。
select
name, result,
case
when result > 80 then 'Pass'
when result > 60 then 'ReTest'
else 'Fail'
end as judgment
from exam;
sqlite> select
...> name, result,
...> case
...> when result > 80 then 'Pass'
...> when result > 60 then 'ReTest'
...> else 'Fail'
...> end as judgment
...> from exam;
name result judgment
---------- ---------- ----------
devkuma 85 Pass
kimkc 54 Fail
araikuma 78 ReTest
happykuma 98 Pass
mykuma 48 Fail
raccoon 68 ReTest
sqlite>
条件に応じた値が返されました。
CASE式で値を比較する
2つ目の形式は式を複数の値と順番に比較します。
SELECT
CASE 式
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2
ELSE 結果3
END
FROM テーブル名;
値1なら結果1、値2なら結果2、どれにも一致しなければELSEの結果を返します。
条件1が真なら結果1、そうでなく条件2が真なら結果2、すべて偽ならELSEの結果を返します。
–
例として次のテーブルを作成します。
create table company (name text, address text);
sqlite> create table company (name text, address text);
sqlite>
テーブルにデータを追加します。
insert into company values ('A_Electric', 'Seoul');
insert into company values ('B_Motor', 'California');
insert into company values ('C_Mobile', 'Suwon');
insert into company values ('D_Shipping', 'Beijing');
sqlite> insert into company values ('A_Electric', 'Seoul');
sqlite> insert into company values ('B_Motor', 'California');
sqlite> insert into company values ('C_Mobile', 'Suwon');
sqlite> insert into company values ('D_Shipping', 'Beijing');
sqlite>
addressに応じた結果を返し、結果カラムをSalesとします。
select
name, address,
case address
when 'California' then 'America'
when 'Seoul' then 'Korea'
when 'Beijing' then 'China'
else 'Unknown'
end as country
from company;
sqlite> select
...> name, address,
...> case address
...> when 'California' then 'America'
...> when 'Seoul' then 'Korea'
...> when 'Beijing' then 'China'
...> else 'Unknown'
...> end as country
...> from company;
name address country
---------- ---------- ----------
A_Electric Seoul Korea
B_Motor California America
C_Mobile Suwon Unknown
D_Shipping Beijing China
sqlite>
条件に応じた値が返されました。