首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL面试必刷题(1) Case When

SQL面试必刷题(1) Case When

作者头像
小萌哥
发布2020-07-20 15:35:45
1.4K0
发布2020-07-20 15:35:45
举报
文章被收录于专栏:算法研习社算法研习社

SQL语言是每个开发人员必备的一种技能,本文对面试过程中常见的SQL面试题进行分类、汇总,每类题型包括一些例题,希望大家能够举一反三。

01

Case When 是什么?

Mysql数据库中CASE WHEN语句,是用于计算条件列表并返回多个可能结果表达式之一。

case 
 when sex = '1' then '男'
 when sex = '2' then '女'
else '未知' 
end

注意:

(1) 在CASE函数中,else部分的默认值是NULL。

(2) CASE函数只返回第一个符合条件的值,剩下的CASE部分被自动忽略。

02

面试题

1. 有一个学生表:students(id, name ,birthday, sex, grade),要求按每个年级统计男生和女生的数量各是多少,统计结果的表头为:年级,男生数量,女生数量。

SELECT grade,
COUNT (CASE WHEN sex = 1 THEN 1 
ELSE NULL 
END) 男生数,
COUNT (CASE WHEN sex = 2 THEN 1
ELSE NULL
END) 女生数
FROM students
GROUP BY grade;

2. 有一个表table1(A,B,C),用SQL语句选出两个列,第一列是A、B两列的较大者,第二列是B、C两列的较小者。

SELECT 
(CASE WHEN a>b THEN a ELSE b END),
(CASE WHEN b>c THEN b ELSE c END)
FROM table1

3. 有一张表table2(语文成绩、数学成绩、英语成绩),请用一条sql语句按以下显示条件得出结果:

显示条件:大于或等于80显示为优秀,大于或等于60表示及格,小于60分表示不及格。

显示格式: 语文 数学 英语 及格 优秀 不及格

select
(case when 语文>=80 then '优秀'
     when 语文>=60 then '及格'
     else '不及格') as 语文,
(case when 数学>=80 then '优秀'
     when 数学>=60 then '及格'
     else '不及格') as 数学,
(case when 英语>=80 then '优秀'
     when 英语>=60 then '及格'
     else '不及格') as 英语,
from table

4. 有如下人口统计数据,要求按照国家和性别进行分组,得出结果如下:

SELECT country,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END)   --女性人口
FROM Table_A  GROUP BY country;

03

Case When 总结

1. 与GROUP BY 结合,自定义列联表统计

# 统计每个国家的男女人口数量
SELECT country,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END)   --女性人口
FROM Table_A  
GROUP BY country;

2. 与Group by结合,自定义分组统计

# 统计每个国家的男女人口数量
SELECT country,
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = '2' THEN population ELSE 0 END)   --女性人口
FROM Table_A  
GROUP BY country;

3. 与distinct结合,去重分组统计

# 统计每个类型的数量
select 
 count(distinct case when type='1'  then id else null end )type1_count,
 count(distinct case when type='2'  then id else null end )type2_count
 from movies

4. 根据条件有选择的UPDATE

# 根据现有工资更新工资:
UPDATE Personnel
SET salary =
CASE 
 WHEN salary >= 5000 THEN salary * 0.9 
 WHEN salary >= 2000 AND salary < 4600  THEN salary * 1.15 
ELSE salary END;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档