题解 | #获取每个部门中当前员工薪水最高的相关信息#
select d.dept_no, d.emp_no, max(s.salary) as salary
from dept_emp as d
left join salaries as s
on s.emp_no = d.emp_no
group by d.dept_no
having count(d.emp_no) > 0
order by d.dept_no
wrong answer: 有个emp_no不对,可能不是拥有最大salary的emp_no, 而是dept中第一个emp
select d.dept_no, d.emp_no, s.salary
from dept_emp as d
left join salaries as s
on s.emp_no = d.emp_no
where s.salary in (select max(s.salary)
from dept_emp as d
left join salaries as s
on s.emp_no = d.emp_no
group by d.dept_no
)
order by d.dept_no
也有问题:又可能别的dept里面有和另一个dept的max(salary)相等,却在这个dept里面不是max的
final correct answer:
select d1.dept_no, d1.emp_no, s.salary
from dept_emp as d1
left join salaries as s
on s.emp_no = d1.emp_no
where s.salary in (select max(s.salary)
from dept_emp as d2
left join salaries as s
on s.emp_no = d2.emp_no and d2.dept_no = d1.dept_no
group by d2.dept_no
)
order by d1.dept_no