mysql case as 使用小结

本文介绍如何在不改变原有数据库的基础上利用case语句自定义显示字段名,以实现特定的数据展示需求,通过实例展示了如何拆分PAmount字段为收入和支出。
说明:case  的用法可以在不改变原有数据库的基础上自定义显示字段名。如下图
原表数据 

我们要这样的效果,PAmount字段拆分显示为 收入和支出,其中正数为收入,负数为支出,收入时支出为0,支出时收入为0,如下图,

此时使用case 即可。
case的语法:
(case  when 条件 then 结果  else 结果
end)
as 自定义字段名

下面以上面例子来说明
1.创建一个表 Pcase;
create table FCase(
PNumber int  not null,
PAmount int  not null
);
2.为表中添加数据
INSERT into  FCase values(1,-10);
INSERT into FCase values(2,30);
INSERT into FCase values(3,10);
INSERT into FCase values(5,0);
INSERT into FCase values(4,-50);

3.默认查询结果
select PNumber,PAmount from FCase;

4.使用 case,as 来自定义查询
select PNumber ,
(CASE
WHEN PAmount>0 THEN PAmount
else 0
END
)as 收入 ,
(CASE 
WHEN PAmount<0 then ABS(PAmount)
ELSE 0
END)as 支出 from FCase;


### MySQL CASE 语句的用法、示例与语法详解 在MySQL中,CASE语句是一种条件表达式,用于根据一系列条件返回不同的值。它类似于编程语言中的`if-else`结构,允许开发者基于条件执行不同的操作[^1]。CASE语句有两种主要形式:简单CASE表达式和搜索CASE表达式。 #### 简单CASE表达式 简单CASE表达式通过将一个表达式的值与多个可能的值进行比较来工作。其语法如下: ```sql CASE column_name WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END ``` 其中: - `column_name` 是要检查的列名或表达式。 - `value1, value2, ...` 是与 `column_name` 比较的值。 - `result1, result2, ...` 是当比较为真时返回的值。 - `ELSE default_result` 是可选的,默认情况下返回的值,如果没有匹配项[^5]。 **示例:** 假设有一个名为`employees`的表,其中包含字段`gender`表示性别,用数字`1`代表男性,`2`代表女性。以下查询会将数字性别转换为文本表示: ```sql SELECT name, CASE gender WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END AS gender_text FROM employees; ``` #### 搜索CASE表达式 搜索CASE表达式允许更复杂的条件判断,而不是简单的值匹配。其语法如下: ```sql CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END ``` 其中: - `condition1, condition2, ...` 是布尔表达式。 - `result1, result2, ...` 是当条件为真时返回的值。 - `ELSE default_result` 是可选的,默认情况下返回的值,如果没有匹配项[^3]。 **示例:** 如果需要根据年龄分组定义员工类别,并按自定义顺序排序,可以使用以下查询: ```sql SELECT name, age, CASE WHEN age > 30 THEN '老员工' WHEN age BETWEEN 20 AND 30 THEN '中生代' ELSE '新员工' END AS age_group, score FROM employees ORDER BY CASE WHEN age > 30 THEN 1 WHEN age BETWEEN 20 AND 30 THEN 2 ELSE 3 END, score DESC; ``` 此查询首先根据年龄分组定义了一个`age_group`,然后在排序时优先按照年龄段的自定义顺序(老员工优先,其次是中生代,最后是新员工),其次按分数降序排列[^4]。 #### 注意事项 1. CASE语句必须以`END`结束。 2. 如果没有匹配的条件且未提供`ELSE`子句,则返回`NULL`。 3. CASE语句通常用于`SELECT`、`ORDER BY`、`WHERE`等子句中[^2]。 ### 示例代码总结 以下是几个常见的CASE语句应用场景: 1. **数据转换:** ```sql SELECT id, CASE WHEN email LIKE '%@example.com' THEN REPLACE(email, '@example.com', '@newexample.com') ELSE email END AS updated_email FROM users; ``` 2. **条件排序:** ```sql SELECT name, age, CASE WHEN age > 30 THEN '老员工' WHEN age BETWEEN 20 AND 30 THEN '中生代' ELSE '新员工' END AS age_group FROM employees ORDER BY CASE WHEN age > 30 THEN 1 WHEN age BETWEEN 20 AND 30 THEN 2 ELSE 3 END, score DESC; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值