这道题考察的点在于联合查询以及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';