[MySQL] case问题

本文介绍两个实用的SQL技巧:一是通过单条更新语句批量转换表中性别字段;二是通过SQL查询判断给定边长是否能构成三角形。这两种方法能够帮助开发者高效地解决实际问题。

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

Swap Salary 

Given a table salary, such as the one below, that has m=male and f=female values. Swap all f and m values (i.e., change all f values to m and vice versa) with a single update query and no intermediate temp table.

For example:

| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |
After running your query, the above salary table should have the following rows:
| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |

update salary 
set sex=case
when sex='m' then 'f'
else 'm'
end
Triangle Judgement

A pupil Tim gets homework to identify whether three line segments could possibly form a triangle.

However, this assignment is very heavy because there are hundreds of records to calculate.

Could you help Tim by writing a query to judge whether these three sides can form a triangle, assuming table triangle holds the length of the three sides x, y and z.

| x  | y  | z  |
|----|----|----|
| 13 | 15 | 30 |
| 10 | 20 | 15 |
For the sample data above, your query should return the follow result:
| x  | y  | z  | triangle |
|----|----|----|----------|
| 13 | 15 | 30 | No       |
| 10 | 20 | 15 | Yes      |
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

方法二

select x,y,z,
if (x+y>z and x+z>y and y+z>x,'Yes', 'No') as triangle
from triangle



### MySQL CASE 语句概述 在 SQL 查询中,`CASE` 表达式用于执行条件逻辑操作。这种表达方式类似于编程中的 `if...else` 结构,在查询数据时提供了一种灵活的方法来处理不同的情况。 #### 基本语法结构 MySQL 中的 `CASE` 有两种基本形式: - **简单 CASE** 当测试单个表达式的不同值时使用此版本。它会依次比较该表达式的每一个可能的结果返回相应的匹配项。 ```sql SELECT column_name, CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END as alias_column FROM table_name; ``` - **搜索 CASE** 允许更复杂的布尔表达式作为判断条件,对于每个满足条件的情况给出相应结果;如果没有任何条件被满足,则返回默认值(可选)。 ```sql SELECT column_name, CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END as alias_column FROM table_name; ``` #### 实际应用案例 假设有一个名为 `orders` 的订单表,其中包含字段 `order_status` 和其他相关信息。现在想要创建一个新的列显示更加友好的状态描述而不是原始的状态码[^1]。 ```sql -- 使用简单 CASE 将 order_status 转换为文字说明 SELECT order_id, customer_id, CASE order_status WHEN 'P' THEN 'Pending' WHEN 'C' THEN 'Completed' WHEN 'X' THEN 'Cancelled' ELSE 'Unknown Status' END AS status_description FROM orders; -- 或者使用搜索 CASE 来实现相同的功能 SELECT order_id, customer_id, CASE WHEN order_status = 'P' THEN 'Pending' WHEN order_status = 'C' THEN 'Completed' WHEN order_status = 'X' THEN 'Cancelled' ELSE 'Unknown Status' END AS status_description FROM orders; ``` 上述两个例子展示了如何利用 `CASE` 语句根据特定业务需求自定义输出内容。这不仅提高了SQL查询的表现力,还使得最终得到的数据更容易理解和分析[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值