はじめに
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 | 成人