这道题考察的点在于联合查询以及Case when语句的用法。

MySQL 的 case when 的语法有两种:

简单函数
CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
搜索函数
CASE WHEN [expr] THEN [result1]…ELSE [default] END

这里选择第一种,再把多个表联合起来就可以,因为只要有奖金的员工,对于没有奖金的员工可以过滤掉,所以可以使用笛卡尔积连接或是内连接的方式,这里选择笛卡尔积连接。

需要注意的是dept_emp的表格是没有数据的,千万别把这个员工部门表也联合进来,否则没有数据。

具体sql如下:

select employees.emp_no,
       employees.first_name,
       employees.last_name,
       emp_bonus.btype,
       salaries.salary,
       (
           case btype when 1 then salary*0.1
           when 2 then salary*0.2
           else salary*0.3 end
       ) as bonus
from
    employees,
    emp_bonus,
    salaries
where
    employees.emp_no = emp_bonus.emp_no
    and employees.emp_no = salaries.emp_no
    and salaries.to_date = '9999-01-01';