题目描述
获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
输出描述
dept_no | emp_no | salary |
---|---|---|
d001 | 10001 | 88958 |
d002 | 10006 | 43311 |
d003 | 10005 | 94692 |
d004 | 10004 | 74057 |
d005 | 10007 | 88070 |
d006 | 10009 | 95409 |
分析
此题较简单,LeetCode上也有类似题目,只要先group by部门分组,求出每个部门的最高工资,再将每个该部门的员工与其一一匹配,即可得到结果。唯一需要注意的地方是题目描述里面并未要求要按照dept_no进行排序,但结果却是有序的,以后如果答案错误,可仔细观察题解。
题解
select E.dept_no,emp_no,salary
from
(
select dept_no,A.emp_no,salary
from dept_emp A, salaries B
where A.emp_no=B.emp_no and A.to_date='9999-01-01' and B.to_date='9999-01-01'
)E
join
(
select max(salary) as max_salary,dept_no from
(
select salary,dept_no
from dept_emp A, salaries B
where A.emp_no=B.emp_no and A.to_date='9999-01-01' and B.to_date='9999-01-01'
)C
group by dept_no
)D
on E.salary=D.max_salary and E.dept_no=D.dept_no
order by E.dept_no;