题目描述:给出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的测试案例就通不过了