三分钟搞懂SQL的Case函数

(一)普通case函数

CASE <表达式>

WHEN <值1> THEN <操作>

WHEN <值2> THEN <操作>

ELSE <操作>

END

(一)搜索case函数

CASE

WHEN <条件1> THEN <命令>

WHEN <条件2> THEN <命令>

ELSE commands

END

作用一: 结合分组统计数据

需求: 将下图的数据按照"洲"进行统计总人数

国家人口

(一)方式一: 使用普通的case函数进行统计

select (

case name

when ‘中国’ then ‘亚洲’

when ‘日本’ then ‘亚洲’

when ‘美国’ then ‘北美洲’

when ‘加拿大’ then ‘北美洲’

else ‘其他’ end

) 洲,

sum(population) 总数

from t_country

GROUP BY

(

case name

when ‘中国’ then ‘亚洲’

when ‘日本’ then ‘亚洲’

when ‘美国’ then ‘北美洲’

when ‘加拿大’ then ‘北美洲’

else ‘其他’ end

)

方式一统计结果

按洲统计结果

(二)方式二: 使用搜索的case函数进行统计

select (

case

when name in(‘中国’,‘日本’) then ‘亚洲’

when name in(‘美国’,‘加拿大’) then ‘北美洲’

else ‘其他’ end

) 洲,

sum(population) 总数

from t_country

GROUP BY

(

case

when name in(‘中国’,‘日本’) then ‘亚洲’

when name in(‘美国’,‘加拿大’) then ‘北美洲’

else ‘其他’ end

)

方式二统计结果

搜索case的统计结果

作用二: 分条件更新字段值

(一)需求: 将工资低于3000的员工涨幅工资20%,工资等于高于3000的员工涨幅8%,数据如下:

源数据

可能有人看到这个需求的第一反应,想直接可以直接通过如下两条update语句直接更新:

update t_salary set salary = salary + (salary * 0.2) where salary < 3000;

update t_salary set salary = salary + (salary * 0.08) where salary >= 3000;

但是,如果是这样执行的话实际上会存在问题,比如:原来工资在2900的员工,执行完第一条语句后工资会变成3480,此时,再执行第二条更新语句,因为满足工资大于三千,则又会去添加多8%的工资,这样明显就是不符合我们的需求的,**所以,如果想完成这个需求,又不想写太复杂的sql,可以通过case函数完成这个功能。

**

**(二)使用搜索的case函数进行分条件修改(此处不能使用简单case函数,因为简单case函数不能判断带范围的条件)

**

update t_salary

set

salary =

(

case

when salary < 3000 then salary + salary * 0.2

when salary >= 3000 then salary + salary * 0.08

else salary

end

)

**(三)分条件修改后结果

**

分条件修改后结果

作用三: 检查表中字段值是否一致

(一)需求: 判断两个表中name字段值是否一致,并返回结果,数据如下:

源数据

**(二)使用搜索的case函数进行分条件修改(此处不能使用简单case函数,因为简单case函数不能判断带范围的条件)

**

select name,

(

case

when desciption in(select description from t_user2) then ‘一致’

else ‘不一致’

end

) 比较结果

from t_user1

**(三)比较结果:

**

字段比较结果

作用四: 行转列(重点-面试常见)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
8819)]

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

[外链图片转存中…(img-Ro4GxjUx-1713441648819)]

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

[外链图片转存中…(img-UO9D9qxX-1713441648820)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值