sql case when用法_SQL面试必刷题(1) Case When

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 1ELSE NULLEND) 女生数FROM studentsGROUP 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. 有如下人口统计数据,要求按照国家和性别进行分组,得出结果如下:

b0a3a5c6555fb61c923565ac812266af.png

52513c71c145c3e4a1bf827283db8438.png

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 PersonnelSET salary =CASE  WHEN salary >= 5000 THEN salary * 0.9  WHEN salary >= 2000 AND salary 4600  THEN salary * 1.15 ELSE salary END;

比心

23c63c426644bd79b3f12ba8e6774bf3.png

推荐阅读: 

  • 最简洁推导-手撕LR

  • 最高频-二叉树面试题-汇总

  • 海量数据面试题解决方案(1)-哈希法

  • 海量数据面试题解决方案(2)-BitMap

  • Python必刷面试题(1)

  • Python必刷面试题(2)

  • Python必刷面试题(3)

【算法研习社】      机器学习、数据挖掘、推荐系统、架构编程

60988909cc92305600aa6a387c5544a7.png

海量干货,持续发送

      大厂内推、技术资料获取, 加小编微信,拉你进 【算法研习社 - 交流群】
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值