SQL練習12:獲取所有部門中當前員工薪水最高的相關資訊
阿新 • • 發佈:2021-01-30
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