这道题考察的点在于联合查询以及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';
京公网安备 11010502036488号