关键词:case,like
2022年12月6日
题目
表: Employees
+-------------+---------+
| 列名 | 类型 |
+-------------+---------+
| employee_id | int |
| name | varchar |
| salary | int |
+-------------+---------+
employee_id 是这个表的主键。
此表的每一行给出了雇员id ,名字和薪水。
写出一个SQL 查询语句,计算每个雇员的奖金。如果一个雇员的id是奇数并且他的名字不是以’M’开头,那么他的奖金是他工资的100%,否则奖金为0。
返回的结果集请按照employee_id
排序。
解法:
select
employee_id,
(case when (employee_id%2)=1 and name not like 'M%' then salary else 0 end) as bonus
from
Employees
order by
employee_id
case的用法:
用法一:
case句法返回第一个value = 列名比较结果为真的结果。 如果没有比较结果符合,则返回else后的结果,如果没有else部分,则返回NULL:
case 列名 when condition1 then result1 when condition2 then result2 when conditionN then resultN else result end;
例:
select case score when '1' then '优秀' when '2' then '良' else ‘菜’ end from student
用法二:
第一种评估一个或多个条件,并返回第一个符合条件的结果。 如果没有条件是符合的,则返回else子句部分的结果,如果没有else部分,则返回null:
case when condition1 then result1 when condition2 then result2 when conditionN then resultN else result end;