【sql】case式の使い方を実際に動かして理解する


はじめに

case式を利用するとsql内でカラムの条件分岐を行えるらしい。

今回はsqlのcase式の学習のためにpostgresのコンテナ環境を利用して実際に実行し、理解を深める。

前準備

postgresテスト環境の構築

# postgresコンテナ環境を起動
$ docker run -i --rm -d\
    --name psql_test \
    -p 15433:5432 \
    -v postgres-tmp:/var/lib/postgresql/data \
    -e POSTGRES_HOST_AUTH_METHOD=trust \
    postgres:13.3-alpine
## postgresコンテナにログイン
$ docker exec -it psql_test sh

テストデータの投入

CREATE DATABASE test_local;

\c test_local;

CREATE TABLE PERSON(
    name varchar(20),
    age integer
);

INSERT INTO PERSON VALUES ('a', 20);
INSERT INTO PERSON VALUES ('b', 10);
INSERT INTO PERSON VALUES ('c', 15);
INSERT INTO PERSON VALUES ('d', 30);
INSERT INTO PERSON VALUES ('e', 40);
-- データ確認
select * from person;

test_local=# select * from person;
-- 結果
 a    |  20
 b    |  10
 c    |  15
 d    |  30
 e    |  40

実験

case式はプログラミングで言うif文ようなもの。
書式は以下の通り

CASE WHEN [条件式1] THEN [条件式1が正のときの処理] ELSE [条件式1が負のときの処理] END

年齢が20以上なら成人、20歳未満なら未成年と表示する

SELECT *, CASE WHEN age >= 20 THEN '成人' ELSE '未成年' END FROM person;
-- 結果 -- 
 a    |  20 | 成人
 b    |  10 | 未成年
 c    |  15 | 未成年
 d    |  30 | 成人
 e    |  40 | 成人