方法一
- 先将每个部门最高工资和对应的部门找出来,形成表t2;
- 再将每个人对应的的工资及对应的部门找出来形成表t1;
- 再将t1和t2连接,条件是部门相同,工资相同。
代码:
select t2.dept_no,t1.emp_no,t2.maxSalary from (select s.emp_no,d.dept_no,s.salary from dept_emp as d join salaries as s on d.emp_no = s.emp_no ) as t1 join ( select d.dept_no,max(salary) as maxSalary from dept_emp as d join salaries as s on d.emp_no = s.emp_no group by d.dept_no) as t2 on t1.dept_no = t2.dept_no and t1.salary = t2.maxSalary -- 应付题目要求,使用排序 order by t2.dept_no
方法二
- 首先也是将每个人和工资、部门联系起来,然后使用where ;
- 条件是(部门,工资) in 子查询(部门,最高工资)
代码:
select d.dept_no,d.emp_no,s.salary
from dept_emp as d
join salaries as s
on d.emp_no = s.emp_no
where (d.dept_no,s.salary) in (
-- in 的用法可以使用元组形式
-- 找出部门和对应的最高工资
select d.dept_no,max(s.salary)
from dept_emp as d
join salaries as s
on d.emp_no = s.emp_no
group by d.dept_no
)
-- 应付题目要求,排序输出
order by d.dept_no注:in的方法可以使用元组式的,也就是(字段1,字段2) in select ... (相关子查询)

京公网安备 11010502036488号