题目描述:给出emp_no、first_name、last_name、奖金类型btype、对应的当前薪水情况salary以及奖金金额bonus。 bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。 当前薪水表示to_date='9999-01-01'。
方法一(case):
select e.emp_no, e.first_name, e.last_name, eb.btype, s.salary, ( case when eb.btype=1 then s.salary*0.1 when eb.btype=2 then s.salary*0.2 else s.salary*0.3 end ) as bonus from employees e join emp_bonus eb on e.emp_no=eb.emp_no join salaries s on eb.emp_no=s.emp_no where s.to_date="9999-01-01"
case语法:
CASE
** WHEN condition1 THEN result1**
** WHEN condition2 THEN result2**
** WHEN conditionN THEN resultN**
** ELSE result**
END;
对于这道题,个人认为用case解答是最符合题意的。直接按条件选出奖金数额。
方法二(观察数据得出规律):
select e.emp_no, e.first_name, e.last_name, eb.btype, s.salary, s.salary*eb.btype*0.1 as bonus from employees e join emp_bonus eb on e.emp_no=eb.emp_no join salaries s on eb.emp_no=s.emp_no where s.to_date="9999-01-01"
如果观察测试案例的数据,可以发现规律btype类型为1,2,3时奖金分别是工资的0.1,0.2,0.3。所以按照这个规律可写出以上的mysql语句。但是题中表示的是其他类型均为薪水的30%。bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。所以换个btype为4的测试案例就通不过了