前言
练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。
今日题目:
1873.计算特殊奖金
表:Employees
列名 | 类型 |
---|---|
employee_id | int |
name | varchar |
salary | int |
employee_id 是这个表的主键(具有唯一值的列)。此表的每一行给出了雇员id ,名字和薪水。
编写解决方案,计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 ‘M’ 开头,那么他的奖金是他工资的 100% ,否则奖金为 0 。
返回的结果按照 employee_id 排序。
我那不值一提的想法:
-
首先梳理表内容,题干一共给了一张员工表,记录了员工id,员工姓名,员工薪水
-
其次分析需求,需要计算每个雇员的奖金,并且要求员工id是奇数并且不是以M开头,这样奖金才是工资的100%,否则就是0
-
对于id是奇数来说,可以用
id%2<>0
来表示 -
对于姓名不是以M开头的,我们可以利用正则表达式,
where name not rlike "^M"
-
对于逻辑判断来说,可以用case when判断逻辑,当然使用if也可以
-
最后用order by 进行排序
-
case when
select employee_id,
case
when employee_id % 2 <> 0 and name not rlike "^M" then salary
else 0
end as bonus
from Employees
order by employee_id
- if
select employee_id,if(employee_id % 2 <> 0 and name not rlike "^M",salary,0) as bonus
from Employees
order by employee_id
结果:
总结:
能运行就行。