1. 程式人生 > 其它 >SQL練習12:獲取所有部門中當前員工薪水最高的相關資訊

SQL練習12:獲取所有部門中當前員工薪水最高的相關資訊

技術標籤:SQL練習76題sqlmysql資料庫

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