SQL练习12:获取所有部门中当前员工薪水最高的相关信息

SQL练习12:获取所有部门中当前员工薪水最高的相关信息

题目链接:牛客网

题目描述
获取所有部门中当前(dept_emp.to_date = '9999-01-01')员工当前(salaries.to_date='9999-01-01')薪水最高的相关信息,给出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`));
如插入:
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d001','1996-08-03','1997-08-03');

INSERT INTO salaries VALUES(10001,90000,'1986-06-26','1987-06-26');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1996-08-03','1997-08-03');
INSERT INTO salaries VALUES(10002,72527,'2000-08-02','2001-08-02');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,90000,'1996-08-03','1997-08-03');

解法
根据题目的要求我们可以先获取部门编号和最高薪水 as r1,在获取符合时间要求的员工信息d.emp_no, d.dept_no, s.salary,之后连接两个表,在两个表中根据限定条件即可获取结果集,最后将结果集按照部门编号升序。

获取部门编号和最高薪水as r1

SELECT d.dept_no, MAX(salary) max_salary
FROM dept_emp d, salaries s
WHERE d.emp_no = s.emp_no AND s.to_date = '9999-01-01' AND d.to_date = '9999-01-01'
GROUP BY dept_no

在这里插入图片描述

获取符合时间要求的员工信息

SELECT d.emp_no, d.dept_no, s.salary
FROM dept_emp d, salaries s
WHERE d.emp_no = s.emp_no AND s.to_date = '9999-01-01' AND d.to_date = '9999-01-01'

在这里插入图片描述

连接两个表

SELECT r1.dept_no, r2.emp_no, r2.salary
FROM (SELECT d.dept_no, MAX(salary) max_salary
FROM dept_emp d, salaries s
WHERE d.emp_no = s.emp_no AND s.to_date = '9999-01-01' AND d.to_date = '9999-01-01'
GROUP BY dept_no) r1,
(SELECT d.emp_no, d.dept_no, s.salary
FROM dept_emp d, salaries s
WHERE d.emp_no = s.emp_no AND s.to_date = '9999-01-01' AND d.to_date = '9999-01-01') r2
WHERE r1.dept_no = r2.dept_no AND r1.max_salary = r2.salary
ORDER BY r1.dept_no

猜你喜欢

转载自blog.csdn.net/qq_43965708/article/details/113393876