SQL语法-CASE用法

CASE基础语法

1. 单个条件 :

比如,根据学生考试分数的不同,来判断成绩是及格还是优良。

CASE 列名 WHEN 条件 THEN 结果 ELSE 其他结果 END 别名
# 简单CASE WHEN
CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END 
CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END
CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END

2. 多个条件—— 单列判断:

就是把上面描述的多个条件合并。 是根据一列内容的不同程度,去划分不同结果。 因为都是针对同一列数据进行判断,这里就可以在case 后面指定列名:CASE 列名 WHEN...

CASE 列名 
     WHEN 条件1 THEN 结果1
	WHEN 条件2 THEN 结果2
	...
	ELSE 其他结果 END 别名
FROM 表格名
# 合并多个条件
case SCORE                                             
	when 'A' then '优'
    when 'B' then '良'
    when 'C' then '中'
    else '不及格' end 成绩
from score_table;

3. 多个条件—— 多列比较判断:

第三种就复杂一点,可能涉及多列数据的相互比较,多个条件的综合判断。语法是 CASE WHEN 条件 THEN 结果 ElSE 结果2

CASE  
     WHEN 条件1 THEN 结果1
	WHEN 条件2 THEN 结果2
	...
	ELSE 其他结果 END 别名
FROM 表格名
# 多条件比较
SELECT x,y,z,
    CASE
        WHEN x + y > z AND x + z > y AND y + z > x THEN 'Yes'
        ELSE 'No'
    END AS 'triangle'
FROM triangle;

CASE WHEN 题目

1)按条件分类-树节点

问题:给定一个表 tree,id 是树节点的编号, p_id 是它父节点的 id 。

表格tree:
+----+------+
| id | p_id |
+----+------+
| 1  | null |
| 2  | 1    |
| 3  | 1    |
| 4  | 2    |
| 5  | 2    |
+----+------+

要求输出表格:
+----+------+
| id | Type |
+----+------+
| 1  | Root |
| 2  | Inner|
| 3  | Leaf |
| 4  | Leaf |
| 5  | Leaf |
+----+------+

答案代码:
select id,
case when p_id is null then 'Root'
when id in (select p_id from tree) then 'Inner'
else 'Leaf' end type
from tree

2)多列比较-三角形

问题:假设表 triangle 保存了所有三条线段的三元组 x, y, z ,你能帮 Tim 写一个查询语句,来判断每个三元组是否可以组成一个三角形吗?

| x  | y  | z  |
|----|----|----|
| 13 | 15 | 30 |
| 10 | 20 | 15 |

注:任意两边之和 大于 第三边

解法一:
SELECT x,y,z,
    CASE
        WHEN x + y > z AND x + z > y AND y + z > x THEN 'Yes'
        ELSE 'No'
    END AS 'triangle'
FROM triangle;

解法二(使用IF):
SELECT
	*, IF(`x` + `y` > `z` AND `x` + `z` > `y` AND `y` + `z` > `x`, 'Yes', 'No') AS triangle
FROM
	triangle;

3) 按条件统计 SUM(case())

问题:现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。
表结构如下:其中STU_SEX字段,0表示男生,1表示女生。

STU_CODE	STU_NAME	STU_SEX	STU_SCORE
XM	小明	0	88
XL	小磊	0	55
XF	小峰	0	45
XH	小红	1	66
XN	晓妮	1	77
XY	小伊	1	99

解法:
SELECT 
	SUM (CASE WHEN STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT,
	SUM (CASE WHEN STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,
	SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_PASS,
	SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_PASS
FROM THTF_STUDENTS

输出结果如下:

MALE_COUNTFEMALE_COUNTMALE_PASSFEMALE_PASS
3313

4)行转列

有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗

E_CODE	E_VALUE 	E_TYPE
北京	28.50	0
北京	23.51	1
北京	28.12	2
北京	12.30	0
北京	15.46	1
上海	18.88	0
上海	16.66	1
上海	19.99	0
上海	10.05	0


SELECT 
	E_CODE,
	SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,--水耗
	SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,--电耗
	SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY--热耗
FROM THTF_ENERGY_TEST
GROUP BY E_CODE

结果输出:

E_CODEWATER_ENERGYELE_ENERGYHEAT_ENERGY
北京40.8038.9728.12
上海48.9216.660

链接:https://leetcode-cn.com/problems/triangle-judgement/solution/pan-duan-san-jiao-xing-by-leetcode/
链接:https://leetcode-cn.com/problems/triangle-judgement/solution/610-pan-duan-san-jiao-xing-by-eric-345/

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL中,CASE语句是用于实现条件逻辑的一种方式。它允许您根据条件对不同的值进行选择或执行不同的操作。CASE语句有两种形式:简单CASE表达式和搜索CASE表达式。 1. 简单CASE表达式: 简单CASE表达式使用固定的值进行比较,然后根据匹配的值执行相应的操作。下面是简单CASE表达式的语法: ``` CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE result END ``` 在这个示例中,expression是要比较的表达式,value1、value2等是可能的匹配值,result1、result2等是与匹配值对应的结果。ELSE子句是可选的,用于指定在没有匹配时的默认结果。 以下是一个简单CASE表达式的示例: ``` SELECT customer_name, CASE city WHEN 'New York' THEN 'East Coast' WHEN 'Los Angeles' THEN 'West Coast' ELSE 'Unknown' END AS region FROM customers; ``` 在这个示例中,根据不同的城市名给客户指定一个区域。 2. 搜索CASE表达式: 搜索CASE表达式使用布尔表达式进行比较,并根据条件的结果执行相应的操作。下面是搜索CASE表达式的语法: ``` CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE result END ``` 在这个示例中,condition1、condition2等是要评估的条件,result1、result2等是与条件对应的结果。ELSE子句也是可选的,用于指定在没有条件匹配时的默认结果。 以下是一个搜索CASE表达式的示例: ``` SELECT product_name, CASE WHEN quantity > 10 THEN 'In Stock' WHEN quantity > 0 THEN 'Limited Stock' ELSE 'Out of Stock' END AS stock_status FROM products; ``` 在这个示例中,根据产品的数量给产品指定一个库存状态。 这就是SQL中使用CASE语句的基本用法。您可以根据需要嵌套CASE语句或在其他SQL语句中使用它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值