sql中的case函数的使用

article/2025/8/5 9:42:51

以下内容首发于我的个人博客网站:
http://riun.xyz/


参考连接: https://www.cnblogs.com/HDK2016/p/8134802.html

一、分组时不同情况的处理

现有如下表:在这里插入图片描述

需要按照大洲进行分组,最终得出如下结果:在这里插入图片描述

可以使用case进行分组,sql如下:

SELECTsum( population ) AS '人数',
CASE`country` WHEN '中国' THEN'亚洲' WHEN '印度' THEN'亚洲' WHEN '日本' THEN'亚洲' WHEN '美国' THEN'北美洲' WHEN '加拿大' THEN'北美洲' WHEN '墨西哥' THEN'北美洲' ELSE '其他' 
END AS '大洲' 
FROMcasedemo 
GROUP BY
CASE`country` WHEN '中国' THEN'亚洲' WHEN '印度' THEN'亚洲' WHEN '日本' THEN'亚洲' WHEN '美国' THEN'北美洲' WHEN '加拿大' THEN'北美洲' WHEN '墨西哥' THEN'北美洲' ELSE '其他' 
END

就是说,单使用group分组只能对字段一致的分组,字段不一致的不会被分到一组;而使用case分组会对单个字段做类似switch case的情况处理,处理单个字段的不同情况,进行人为分组。

case语法为:

case 字段名 when 属性值1 then 被归类属性when 属性值2 then 被归类属性else 其他被归类属性
end

以上即作为group by的条件,同时也作为select的内容。

(以上表数据见casedemo.sql)

二、分组后其他字段的计算

现有如下表:在这里插入图片描述

需要查询出每个国家的男女性别的人数,最终得出如下结果:在这里插入图片描述

可以使用case对查询内容进行计算,sql如下:

SELECTcountry,sum( CASE WHEN sex = 1 THEN population ELSE 0 END ) AS '男性',sum( CASE WHEN sex = 2 THEN population ELSE 0 END ) AS '女性' 
FROMcasedemo2 
GROUP BYcountry

上面将字段名sex写在了when后面,也可以像第一种情况一样写在case和when之间:

SELECTcountry,sum( CASE sex WHEN 1 THEN population ELSE 0 END ) AS '男性',sum( CASE sex WHEN 2 THEN population ELSE 0 END ) AS '女性' 
FROMcasedemo2 
GROUP BYcountry

这里根据country分组后对查询的内容使用case进行分情况处理。

(以上表数据见casedemo2.sql)

三、根据条件UPDATE

应用一:分条件update值

若有如下表:在这里插入图片描述

现需要将工资5000以上(包括5000)的员工的工资减少10%,将工资在[2000,4600)之前的员工的工资增加15%,最终结果如下所示:在这里插入图片描述

很容易让人想到使用两条sql:

update casedemo3 set salary = salary * 0.9 where salary >= 5000;
update casedemo3 set salary = salary * 1.15 where salary >= 2000 and salary < 4600

但是这样是不正确的做法。假设有人的工资是5000块,那么按照规定,她的工资应该减少10%,所以当执行第一条sql时,她的工资会变成4500;而当执行第二条sql时,她的工资小于4600,所以又会增加15%,最终变成5175。整体看来,本应工资减少的她,最后却增加了,所以这样是不符合逻辑的。

如果不想增加复杂的处理,我们可以使用一条sql来实现这个需求,如下:

UPDATE casedemo3 
SET salary =
CASEWHEN salary >= 5000 THEN salary * 0.9 WHEN salary >= 2000 AND salary < 4600 THEN salary * 1.15 ELSE salary 
END

注意,最后的else salary一定要有,如果没有的话会将不在这两个范围内的工资都设为null,因为在case函数中else部分的默认值是NULL,就是说不主动设置else的值那么就是NULL。

(以上表数据见casedemo3.sql)

四、检查两表中某字段是否一致

在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等。比如说使用IN,EXISTS,可以进行子查询,从而 实现更多的功能。

现有如下两表:在这里插入图片描述在这里插入图片描述

现需检查两表中name字段和str字段是否一致,则可进行如下sql:

SELECT NAME,
CASE	WHEN NAME IN ( SELECT str FROM casedemo42 ) THEN '一致' ELSE '不一致' END AS label 
FROM
casedemo41

查询结果:在这里插入图片描述


http://chatgpt.dhexx.cn/article/6ncRtUFd.shtml

相关文章

sql round函数(case函数)

注意&#xff1a;关于SELECT语句拼写注意事项 先列再纵&#xff0c;即&#xff1a;select 列 from tablename group by 纵 1. round(parm1,int parm2)&#xff1a;对parm1进行四舍五入操作&#xff0c;parm2为保留小数的有效位数&#xff1b; parm1 通常为double类型&#x…

sql中的case函数

在sql中case是一个控制流语句;类似于if语句 Case语句有两种形式:简单case语句与搜索case语句; 简单的case语句:可以检查表达式的值与一组唯一值的匹配: 语法: Case expression When value1 then returnvaluse1 When value2 then returnvaluse2 Else defaultvalue End Ca…

CASE函数

CASE函数 是一种多分支的函数&#xff0c;可以根据条件列表的值返回多个可能的结果表达式中的一个。 可用在任何允许使用表达式的地方&#xff0c;但不能单独作为一个语句执行。 分为&#xff1a; 简单CASE函数 搜索CASE函数 简单 CASE函数 1 2 3 4 5 6 CASE 测试表达式 WHE…

sql语句之case函数的用法

简单case函数语法&#xff1a; 是一种多分支的函数&#xff0c;可以根据条件列表的值返回多个可能的结果表达式中的一个。&#xff08;类似于if,else&#xff09; 简单 CASE函数&#xff1a; 计算测试表达式&#xff0c;按从上到下的书写顺序将测试表达式的值与每个WHEN子句的…

【MYSQL快速入门】case函数

case函数&#xff1a; 是一种多分支的函数&#xff0c;可以根据条件列表的值返回多个可能的结果表达式中的一个。 简单case函数&#xff1a; case 测试表达式 when 简单表达式1 then 结果表达式1 when 简单表达式2 then 结果表达式2.. when 简单表达式3 then 结果表达式n [e…

三分钟搞懂SQL的Case函数

文章标题 前言一: 使用语法作用一: 结合分组统计数据作用二: 分条件更新字段值作用三: 检查表中字段值是否一致作用四: 行转列(重点-面试常见)五:普通case函数和搜索case函数的区别六:总结 温馨提示: 本文大约1832字,阅读完大概需要2-3分钟,希望您能耐心看完,倘若你对该知识点已…

域名泛解析设置方法

域名泛解析是指&#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支持一下几种运算符: 算术运算符: 赋值运算符: 复合赋值运算符: 变量 简单的说,变量就是编程中最基本的存储单位,变量会暂时性存储你进去的东西,例如: