三分钟搞懂SQL的Case函数

article/2025/8/5 9:43:38

文章标题

        • 前言
        • 一: 使用语法
        • 作用一: 结合分组统计数据
        • 作用二: 分条件更新字段值
        • 作用三: 检查表中字段值是否一致
        • 作用四: 行转列(重点-面试常见)
        • 五:普通case函数和搜索case函数的区别
        • 六:总结

   温馨提示: 本文大约1832字,阅读完大概需要2-3分钟,希望您能耐心看完,倘若你对该知识点已经比较熟悉,你可以直接通过目录跳转到你感兴趣的地方,希望阅读本文能够对您有所帮助,如果阅读过程中有什么好的建议、看法,欢迎在文章下方留言或者私信我,如果觉的文章给你带来一点帮助,可以帮忙点一下赞和关注,谢谢!!

前言

作用: 可以使用它们在数据库进行判断功能,跟代码中的if…else功能一样.但是,它们又存在差异,下面就来讲它们的具体作用和差别。

一: 使用语法

   (一)普通case函数

CASE  <表达式>WHEN <1> THEN <操作>WHEN <2> THEN <操作>...ELSE <操作>
END 

   (一)搜索case函数

CASEWHEN <条件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_countryGROUP 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_countryGROUP 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_salaryset salary = (case when salary < 3000 then salary + salary * 0.2when salary >= 3000 then salary + salary * 0.08else salary end)

   (三)分条件修改后结果

分条件修改后结果


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

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

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

select name,
(case when desciption in(select description from t_user2) then '一致'else '不一致'end
) 比较结果
from t_user1

   (三)比较结果:

字段比较结果


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

   (一)需求: 将表中数据按照每个学生姓名 、科目、成绩进行排序,数据如下:

源数据
   (二)使用case函数转换

// 使用普通case函数
SELECT NAME,max( CASE class WHEN '语文' THEN grade ELSE 0 END ) 语文,max( CASE class WHEN '数学' THEN grade ELSE 0 END ) 数学,max( CASE class WHEN '英语' THEN grade ELSE 0 END ) 英语 
FROMt_source 
GROUP BY
NAME// 使用搜索case函数
SELECT NAME,max( CASE  WHEN class = '语文' THEN grade ELSE 0 END ) 语文,max( CASE  WHEN class =  '数学' THEN grade ELSE 0 END ) 数学,max( CASE  WHEN class = '英语' THEN grade ELSE 0 END ) 英语 
FROMt_source 
GROUP BY
NAME

   (三)转换结果

行转列

五:普通case函数和搜索case函数的区别

   通过上面的案例可看到,普通的case函数写法相对简洁,但是功能也相对简单,搜索case函数的功能更加强大,具体如下:

   1、简单case函数判断条件只能是等于,而搜索case函数的条件可以是子查询,In,大于、等于等等。
   2、如果只是使用简单的条件分组,可以选择普通case函数,如果需要判断更多的场景,则选择搜索case更好。

六:总结

   如果你想亲自实践,需要本文章的测试数据,可以私信回复: 【测试数据】即可

   看到此处,你应该对Case函数有了更深入的认识,但是、关于Case函数的使用远远不止这一篇文章描述的,还需要我们在实践中去发现更多的可能,如果你看完本文觉得有疑问或者本文有错误的地方,欢迎私信或者在下方留言指出。

   码字不易、如果你觉得本文对你有一点点帮助,可以点赞和关注!

帮忙关注,谢谢

关注公众号【是秘密呀joy】一个让你提高技术知识的秘密基地!

http://chatgpt.dhexx.cn/article/MJaSls9w.shtml

相关文章

域名泛解析设置方法

域名泛解析是指&#xff1a;利用 *&#xff08;星号&#xff09;来做次级域名以实现所有的次级域名均指向同一 IP 地址。 例如你的域名是 a.com,设置泛解析&#xff08;.a.com&#xff09;后&#xff0c;所有该域名下的次级域名&#xff08;如 b.a.com&#xff09;都将指向与 a…

服务器泛解析网站,网站域名解析教程

我们这篇文章就讲一下域名解析的教程&#xff0c;在讲之前先介绍一些基础的概念&#xff0c;对域名解析过程有一个理解。 下面这段看不明白没关系&#xff0c;看不懂直接不看&#xff0c;跟着下面教程操作就可以了。 我们都知道&#xff0c;访问一个网站输入域名&#xff0c;比…

linux系统如何绑定域名解析,Linux系统网站如何站点部署域名泛解析绑定

做过站群或绑定多个二级域名的技术人员都知道&#xff0c;在windows下如果可绑定多个二级域名&#xff0c;一般都会用到默认站点的空主机头&#xff0c;只有绑定了80端口的空主机头&#xff0c;才可实现多个二级域名的绑定&#xff0c;或指定目录或301转发。但是&#xff0c;服…

Nginx服务器php自动进行二级域名泛解析

Nginx服务器php自动进行二级域名泛解析: 目录&#xff1a;想要实现多用户博客系统泛解析二级域名【以baidu.com为例】 例如&#xff1a;用户qulinke1230注册了一个账号&#xff0c;那么他可以通过【qulinke1230.baidu.com】格式访问他的博客 实现&#xff1a; 1、首先要在你的域…

子域名爆破的泛解析问题

字节跳动——渗透测试实习生面试题&#xff1a;信息收集如何处理子域名爆破的泛解析问题&#xff1f; 一、什么是域名泛解析 利用通配符* &#xff08;星号&#xff09;来做次级域名以实现所有的次级域名均指向同一IP地址。在域名前添加任何子域名&#xff0c;均可访问到所指向…

域名泛解析什么意思?怎么设置?

域名泛解析什么意思 在域名前添加任何子域名&#xff0c;均可访问到所指向的网站。也就是客户的域名yfi6.com之下所设的*.yfi6.com全部域名均可访问。 域名泛解析怎么设置 泛域名解析是指将*.域名解析到同一IP。 泛域名解析和域名解析有何不同&#xff1f; 泛域名解析是指&a…

域名泛解析设置

接前一篇《MVC实现动态二级域名》&#xff0c;前面我们说道MVC如何实现动态二级域名&#xff0c;其中也涉及到DNS服务器&#xff0c;也要做相应的泛域名解析设置。所以我在这里&#xff0c;就来说道说道泛域名解析是怎么回事。 1、什么是泛域名解析 泛域名解析是指将*.域名解析…

域的泛解析到网站服务器,什么是域名泛解析 怎么设置域名泛解析

很多建网站新手可能是第一次听说“域名泛解析”&#xff0c;因为在学做网站论坛的建站基础知识中&#xff0c;只说了“域名解析”&#xff0c;就是将自己的网站域名解析到网站空间上&#xff0c;产生关联。那么“域名泛解析”与“域名解析”是不是同一个东东呢&#xff1f; 什么…

工具开发 | 子域名爆破的泛解析问题

声明&#xff1a;本人坚决反对利用文章内容进行恶意攻击行为&#xff0c;一切错误行为必将受到惩罚&#xff0c;绿色网络需要靠我们共同维护&#xff0c;推荐大家在了解技术原理的前提下&#xff0c;更好的维护个人信息安全、企业安全、国家安全。 一、什么是域名泛解析 域名泛…

如何设置域名泛解析及解决恶意泛域名解析的方法

最近看到很多的博主和站长都发帖讨论关于泛域名解析的问题&#xff0c;也看到过有不少的网站被人做了恶意泛域名解析&#xff0c;本来没打算再研究这个问题&#xff0c;可今天发现公司的一个企业网站也被恶意泛域名解析了&#xff0c;搞了半天&#xff0c;总算把问题给解决了。…

python基础之输入输出语法

博主简介&#xff1a;原互联网大厂tencent员工&#xff0c;网安巨头Venustech员工&#xff0c;阿里云开发社区专家博主&#xff0c;微信公众号java基础笔记优质创作者&#xff0c;csdn优质创作博主&#xff0c;创业者&#xff0c;知识共享者,欢迎关注&#xff0c;点赞&#xff…

python正确的输入语句_python怎么让输入语句

展开全部 1.语句 1.1 语句和表达式有什么区32313133353236313431303231363533e58685e5aeb931333365633936别呢&#xff1f;表达式就是某件事情&#xff0c;而语句是做某件事情&#xff08;即告诉计算机做什么&#xff09;。比如2*2是4&#xff0c;而print2*2则是打印4 1.2 if…

python循环语句打印输出1-10_python 笔记(变量,输入输出,条件语句,循环语句)...

首先了解 python支持一下几种运算符: 算术运算符: 赋值运算符: 复合赋值运算符: 变量 简单的说,变量就是编程中最基本的存储单位,变量会暂时性存储你进去的东西,例如:

python输入输出语句格式化输出字符串

python-输入输出-格式化输出字符串 输入3行字符串&#xff0c;然后对其按照说明进行格式化输出 输入格式: 第1行&#xff1a;一个浮点数字符串 第2行&#xff1a;一个整数字符串 第3行&#xff1a;一个非数值型字符串 输出格式: 对浮点数字符串: 第1行&#xff1a; 保留2位小…

python的选择语句if语句,Python的输入和输出函数(python基础学习5)

python的选择语句if语句&#xff0c;Python的输入和输出函数 if语句1&#xff09;第一种2&#xff09;第二种3&#xff09;第三种 python键盘输入屏幕输出输入input()函数 输出print&#xff08;&#xff09;函数1&#xff09;非格式化输出2&#xff09;格式化输出--%3&#xf…

在python中常用的输入输出语句分别是_python中输入和输出语句的基本使用

一、 input输入函数 input函数:获取用户输入,保存成一个字符串。重要的话,说两遍,input函数的返回值是一个字符串类型。哪怕你输入的是个数字1,返回给你的只会是字符串“1”,而不是 整数1。下面是一些简单的展示例子:>>> inp = input("please input your…

python输入语句-python中输入和输出语句的基本使用

一、 input输入函数 input函数&#xff1a;获取用户输入&#xff0c;保存成一个字符串。重要的话&#xff0c;说两遍&#xff0c;input函数的返回值是一个字符串类型。哪怕你输入的是个数字1&#xff0c;返回给你的只会是字符串“1”&#xff0c;而不是 整数1。下面是一些简单…

python输入语句-python输入语句

广告关闭 2017年12月&#xff0c;云社区对外发布&#xff0c;从最开始的技术博客到现在拥有多个社区产品。未来&#xff0c;我们一起乘风破浪&#xff0c;创造无限可能。 python条件语句目录:1. 分支语句(if...else...)2. 循环(for,while,嵌套循环) #for用在已知循环次数whil…

python3接收用户输入的语句是_python输入语句是什么

python输入语句是“input()”。input()函数可以从标准输入读入一行文本,默认的标准输入是键盘;即读取用户从键盘输入的信息。input()可以接收一个Python表达式作为输入,并将运算结果返回。 本教程操作环境:windows10系统、Dell G3电脑、Python3。 python输入语句是“input(…