sql中 case when then else多个条件
这在笔试题中是比较常见的一个考法。 很多同学完全不知道这种用法,导致笔试通不过,没机会面试,进不了公司赚不了钱,从而谈不到女朋友结不了婚。
可以看到一个小小的sql语法会导致多么严重的后果。
1.案例
1.1 场景1(查询)
初始化一张数据表:student
三个字段:id,学生姓名,分数。
需求:查出学生姓名(name)以及得分状况(用level字段表示),小于60为差、大于60小于等于80为良、大于80为优。
先看看我们最后要得到的结果是什么的:
上sql:
SELECT NAME
,(
CASE
WHEN score < 60 THEN "差"
WHEN score >= 60 && score < 80 THEN "良"
WHEN score > 80 THEN "优"
ELSE '无成绩'
END
) AS LEVEL
FROM
student
1.2 场景2(查询)
多了一个性别字段。
需求:统计,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。
这个需求相对就比较复杂一点,先看看我们要达到的效果:
上sql:
SELECT
SUM(CASE WHEN sex = '男' THEN 1 ELSE 0 END ) AS 男生人数,
SUM(CASE WHEN sex = '女' THEN 1 ELSE 0 END ) AS 女生人数,
SUM(CASE WHEN sex = '男' and score >= 60 THEN 1 ELSE 0 END ) AS 男合格人数,
SUM(CASE WHEN sex = '女' and score >= 60 THEN 1 ELSE 0 END ) AS 女合格人数
FROM
student;
1.3 场景3(转义)
这个场景就比较简单,做一个简单的转义。
需求:查询student表,
所有sex字段值为”女“的全部转换成”女同学“;
所有sex字段值为”男“的全部转换成”男同学“;
并且不产生新的列。
上sql:
SELECT
id,
NAME,
score,
( CASE sex WHEN "女" THEN "女同学" ELSE "男同学" END ) AS sex
FROM
student
2.总结
语法结构:
case
when
then
else
end
关键词 | 含义 |
---|---|
case | 表示语法的开始(可指定要查询的字段),与end呼应 |
when | 后面是条件表达式,如果满足条件的数据进入then |
then | 对when赛选通过后的数据进行重新赋值(形成新的结果集,不会影响原数据) |
else | 可以用在when和then后面,表示不满足条件的数据要怎么赋值 |
end | 表示语法的结束,与case 呼应 |
和Java中的 If else 其实是一样的道理。
2.1 使用场景
- 统计类SQL。
- 查询结果需要新增自定义表头。
- 字典转义,如库中存的是0(0代表女性),那么我SQL查出来就不展示0,而是女。
你的点赞和收藏是我们分享的动力