SQL CASE WHEN 表达式的几种使用形式

SQL 语句中,case when 表达式是再常见不过的了,本片文章总结一下 case when 表达式的几种使用形式。

第一种

直接 case 指定字段:

1
2
3
4
5
6
7
8
9
select
user_name,
case height
when 170 then '标准'
when 180 then '偏高'
when 160 then '偏矮'
else '其它'
end as "身高类型"
from t_user;

第二种

when 里面是表达式:

1
2
3
4
5
6
7
8
9
select
user_name,
case
when height = 170 then '标准'
when height = 180 then '偏高'
when height = 160 then '偏矮'
else '其它'
end as "身高类型"
from t_user;

而且 when 表达式可以是多个:

1
2
3
4
5
6
7
8
select
user_name,
case
when height >= 180 and weight <= 120 then '偏瘦'
when height <= 160 and weight >= 140 then '偏胖'
else '正常'
end as "体型情况"
from t_user;

特别注意:case when 表达式最后面一定要有 else 表示其它情况以及 end 表示结束标识。

附:结构和数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE t_user (
user_code character varying(20) NOT NULL, -- 用户编码
user_name character varying(20), -- 用户姓名
height integer, -- 身高
weight integer, -- 体重
CONSTRAINT t_user_pkey PRIMARY KEY (user_code)
);
COMMENT ON COLUMN t_user.user_code IS '用户编码';
COMMENT ON COLUMN t_user.user_name IS '用户姓名';
COMMENT ON COLUMN t_user.height IS '身高';
COMMENT ON COLUMN t_user.weight IS '体重';

INSERT INTO public.t_user(user_code, user_name, height, weight) VALUES ('zhangsan', '张三', 170, 140);
INSERT INTO public.t_user(user_code, user_name, height, weight) VALUES ('lisi', '李四', 180, 110);
INSERT INTO public.t_user(user_code, user_name, height, weight) VALUES ('wangwu', '王五', 160, 150);
INSERT INTO public.t_user(user_code, user_name, height, weight) VALUES ('zhaoliu', '赵六', 165, 130);