SQL利用Case When Then多条件判断

本文详细介绍了SQL中的Case函数,包括简单Case函数和Case搜索函数的使用方法,并通过实例展示了如何利用Case函数进行数据分组和分析。

CASE
<wbr><wbr><wbr> WHEN 条件1 THEN 结果1<br><wbr><wbr><wbr> WHEN 条件2 THEN 结果2<br><wbr><wbr><wbr> WHEN 条件3 THEN 结果3<br><wbr><wbr><wbr> WHEN 条件4 THEN 结果4<br> .........<br><wbr><wbr><wbr> WHEN 条件N THEN 结果N<br><wbr><wbr><wbr> ELSE 结果X<br> END<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> WHEN '1' THEN '男'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> WHEN '2' THEN '女'<br> ELSE '其他' END<br> --Case搜索函数<br> CASE WHEN sex = '1' THEN '男'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> WHEN sex = '2' THEN '女'<br> ELSE '其他' END<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

例如:

SELECT<wbr><wbr><wbr><wbr> id, name, cj, (CASE WHEN cj &lt; 60 THEN '不及格' WHEN cj BETWEEN 60 AND 90 THEN '良好' WHEN cj &gt; 90 THEN '优秀' END) AS 状态<br> FROM<wbr><wbr> stud</wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>


这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> WHEN col_1 IN ('a')<wbr><wbr><wbr><wbr><wbr><wbr> THEN '第二类'<br> ELSE'其他' END<br><br> 下面我们来看一下,使用Case函数都能做些什么事情。<br><br> 一,已知数据按照另外一种方式进行分组,分析。<br><br> 有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)<br> 国家(country) 人口(population)<br> 中国 600<br> 美国 100<br> 加拿大 100<br> 英国 200<br> 法国 300<br> 日本 250<br> 德国 200<br> 墨西哥 50<br> 印度 250<br><br> 根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。<br> 洲 人口<br> 亚洲 1100<br> 北美洲 250<br> 其他 700<br><br> 想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。<br> 如果使用Case函数,SQL代码如下:<br> SELECT<wbr><wbr>SUM(population),<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>CASE country<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '中国'<wbr><wbr><wbr><wbr> THEN '亚洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '印度'<wbr><wbr><wbr><wbr> THEN '亚洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '日本'<wbr><wbr><wbr><wbr> THEN '亚洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '美国'<wbr><wbr><wbr><wbr> THEN '北美洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '加拿大'<wbr><wbr>THEN '北美洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '墨西哥'<wbr><wbr>THEN '北美洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>ELSE '其他' END<br> FROM<wbr><wbr><wbr><wbr>Table_A<br> GROUP BY CASE country<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '中国'<wbr><wbr><wbr><wbr> THEN '亚洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '印度'<wbr><wbr><wbr><wbr> THEN '亚洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '日本'<wbr><wbr><wbr><wbr> THEN '亚洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '美国'<wbr><wbr><wbr><wbr> THEN '北美洲'<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>WHEN '加拿大'<wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值