题解 | #获取每个部门中当前员工薪水最高的相关信息#

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

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务