Salary
表:+-------------+----------+ | Column Name | Type | +-------------+----------+ | id | int | | name | varchar | | sex | ENUM | | salary | int | +-------------+----------+ id 是这个表的主键。 sex 这一列的值是 ENUM 类型,只能从 ('m', 'f') 中取。 本表包含公司雇员的信息。请你编写一个 SQL 查询来交换所有的
'f'
和'm'
(即,将所有'f'
变为'm'
,反之亦然),仅使用 单个 update 语句 ,且不产生中间临时表。注意,你必须仅使用一条 update 语句,且 不能 使用 select 语句。
查询结果如下例所示。
示例 1:
输入: Salary 表: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | m | 2500 | | 2 | B | f | 1500 | | 3 | C | m | 5500 | | 4 | D | f | 500 | +----+------+-----+--------+ 输出: +----+------+-----+--------+ | id | name | sex | salary | +----+------+-----+--------+ | 1 | A | f | 2500 | | 2 | B | m | 1500 | | 3 | C | f | 5500 | | 4 | D | m | 500 | +----+------+-----+--------+ 解释: (1, A) 和 (3, C) 从 'm' 变为 'f' 。 (2, B) 和 (4, D) 从 'f' 变为 'm' 。
这道题目当中可以看出,我们set当中是需要一个条件来输出的
update salary
set=(
CASE sex WHEN 'm' # 当sex 这个字段为m时
THEN 'f' # 将这个字段修改为f
ELSE 'm' # 否则修改为m
END # 表示结束
)
# 使用CASE WHEN 的时候建议使用大写
大小写的问题,这个我看一个老师说最好使用大写。你也可以使用小写的试试
题目2:
表:
Employees
+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | employee_id | int | | name | varchar | | salary | int | +-------------+---------+ employee_id 是这个表的主键。 此表的每一行给出了雇员id ,名字和薪水。写出一个SQL 查询语句,计算每个雇员的奖金。如果一个雇员的id是奇数并且他的名字不是以'M'开头,那么他的奖金是他工资的100%,否则奖金为0。
Return the result table ordered by
employee_id
.返回的结果集请按照
employee_id
排序。查询结果格式如下面的例子所示。
示例 1:
输入: Employees 表: +-------------+---------+--------+ | employee_id | name | salary | +-------------+---------+--------+ | 2 | Meir | 3000 | | 3 | Michael | 3800 | | 7 | Addilyn | 7400 | | 8 | Juan | 6100 | | 9 | Kannon | 7700 | +-------------+---------+--------+ 输出: +-------------+-------+ | employee_id | bonus | +-------------+-------+ | 2 | 0 | | 3 | 0 | | 7 | 7400 | | 8 | 0 | | 9 | 7700 | +-------------+-------+ 解释: 因为雇员id是偶数,所以雇员id 是2和8的两个雇员得到的奖金是0。 雇员id为3的因为他的名字以'M'开头,所以,奖金是0。 其他的雇员得到了百分之百的奖金。
这个题目,使用到了CASE when 的另一种使用方式
select employee_id,
(CASE WHEN
MOD(employee_id,2)=1 and name not like 'M%' # mod(参数1,参数2) 参数1/参数2 该条件表示,employee_id 为奇数,一种就是=1 或者 !=0 两种表达方式都可以,第二个条件表示不以M开头的
THEN salary # 如果条件满足那么返回薪资
ELSE 0 # id为偶数 或者 奇数中以M开头,那么返回为0
END) as bonus
from employees
order by employee_id asc # 安排id 进行 正向排序,默认为倒序 或者可以DESC ,存在多个条件排序的时候 就是 字段1 排序方式,字段2 排序方式----》表示字段1数值相同的时候就按照条件2的排序方式进行排序