case when语句中加上and or的处理方式

本文介绍了如何在 SQL CASE WHEN 语句中使用 AND 和 OR 条件处理复杂逻辑,通过示例展示了如何进行等值转换、范围转换和列转行操作,并详细阐述了在统计分析中如何结合 AND 和 OR 实现更精细的数据汇总。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文来说下case when then中的条件里面加上and or的处理方式。


概述

case when语句,用于计算条件列表并返回多个可能结果表达式之一。CASE 具有两种格式:简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 CASE 搜索函数计算一组布尔表达式以确定结果

如果不知道啥是case when流程控制语句,请看这里case when流程控制语句

case when语句其实就类似java语言中if else语句,就是在sql中控制sql语句的流程。如果想在case when语句中实现更加复杂的业务逻辑,可以加上or和and,其实类似java中的&&和||。只不过一种是在java程序中实现,一种是在sql语句中实现。下面给几个例子来实际感受一下case when语句中加上and or的处理方式。


准备数据

有如下一张用户表,包含如下几个主要的字段

在这里插入图片描述

user表包含如下几条数据信息

在这里插入图片描述


case when的经典用法

等值转换

在设计数据库的时候总是会把用户的性别用int存储('0’为男,'1’为女),但是怎么把它转换成汉字显示呢?如果性别在配置表中进行了配置,可以两张表关联查询得到。获得在代码中进行if判断,进行转换。那还有没有其他比较好的办法,case when就可以。

sql语句

SELECT ID,
NAME AS '名字',
(CASE sex WHEN 0 THEN '男' ELSE '女' END) AS '性别'
FROM USER;

查询结果

在这里插入图片描述


范围转换

有的时候,也会遇到这种情况,按照用户年龄划分为青少年(0-30)、中年(30-60)、老年(60+),这个跟第一个不同的是,他是一个分数的范围,要怎么转换成汉字显示呢?你可能觉得很简单,不就是吧when那换成条件吗?先打住咱们往下看

sql语句

SELECT ID,
NAME AS '名字',
(CASE WHEN age>=60 THEN '老年' WHEN age >= 30 THEN '中年' ELSE '青少年' END) AS '年龄'
FROM USER;

查询结果

在这里插入图片描述

列转行操作

比如想统计出北京,上海,天津的男女性各有多少人

SELECT (CASE sex WHEN 0 THEN '男' ELSE '女' END) AS  性别 
,SUM(CASE address WHEN '北京' THEN 1 ELSE 0 END) AS  北京
,SUM(CASE address WHEN '上海' THEN 1 ELSE 0 END) AS  上海
,SUM(CASE address WHEN '天津' THEN 1 ELSE 0 END) AS  天津
FROM USER GROUP BY 性别;

查询结果

在这里插入图片描述
这里是把地址这个字段进行了列转行的操作,同样可以对性别进行列转行操作,同样可以达到这个目的。


case when语句中加上and or的处理方式

前面统计出北京,上海,天津的男女性各有多少人,如果还想在这个基础上统计北京,上海,天津退休的男女各有多少人,这个应该怎么做。应该在case when语句中加上and来进行处理。

case when语句中加上and的处理方式

sql语句

SELECT (CASE sex WHEN 0 THEN '男' ELSE '女' END) AS  性别 
,SUM(CASE address WHEN '北京' THEN 1 ELSE 0 END) AS  北京总人数
,SUM(CASE  WHEN (address ='北京' AND is_retire = 1) THEN 1 ELSE 0 END) AS  北京退休人数
,SUM(CASE address WHEN '上海' THEN 1 ELSE 0 END) AS  上海总人数
,SUM(CASE  WHEN (address ='上海' AND is_retire = 1) THEN 1 ELSE 0 END) AS  上海退休人数
,SUM(CASE address WHEN '天津' THEN 1 ELSE 0 END) AS  天津总人数
,SUM(CASE  WHEN (address ='天津' AND is_retire = 1) THEN 1 ELSE 0 END) AS  天津退休人数
FROM USER GROUP BY 性别;

查询结果

在这里插入图片描述

case when语句中加上or的处理方式

接着上面,如果还想统计北京或上海,北京或天津,天津或上海的男女性各有多少人,应该怎么做,这就应该在case when语句中加上or的处理方式

sql语句

SELECT (CASE sex WHEN 0 THEN '男' ELSE '女' END) AS  性别 
,SUM(CASE  WHEN (address ='北京' OR address ='上海') THEN 1 ELSE 0 END) AS  北京上海总人数
,SUM(CASE  WHEN (address ='上海' OR address ='天津') THEN 1 ELSE 0 END) AS  上海天津总人数
,SUM(CASE  WHEN (address ='天津' OR address ='北京') THEN 1 ELSE 0 END) AS  天津北京人数
FROM USER GROUP BY 性别;

查询结果

在这里插入图片描述


本文小结

本文详细介绍了case when语句中加上and or的处理方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值