题目背景:
查找在职员工自入职以来的薪水涨幅情况,给出在职员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序.
to_date为薪资调整某个结束日期,或者为离职日期,to_date='9999-01-01'时,表示依然在职,无后续调整记录.
数据集如下:
有一个员工表employees简况如下:
emp_no | birth_date | first_name | last_name | gender | hire_date |
10001 | 1953-09-02 | Georgi | Facello | M | 2001-06-22 |
10002 | 1964-06-02 | Bezalel | Simmel | F | 1999-08-03 |
有一个薪水表salaries简况如下:
emp_no | salary | from_date | to_date |
10001 | 85097 | 2001-06-22 | 2002-06-22 |
10001 | 88958 | 2002-06-22 | 9999-01-01 |
10002 | 72527 | 1999-08-03 | 2000-08-02 |
10002 | 72527 | 2000-08-02 | 2001-08-02 |
该题目的几个关键字为:
- 在职员工
- 自入职
- 薪水涨幅
- 涨幅排序
解答本题的思路为:
1)求解出入职员工时的薪资情况
2)求解出员工当前的薪资情况
3)建立两个表,将(1)、(2)表进行内连接,实现多表查询出薪资差异的情况
SELECT
a.emp_no,
( b.salary - a.salary ) AS growth
FROM
(
SELECT
s.emp_no,
s.salary
FROM
employees e
LEFT JOIN salaries s ON s.emp_no = e.emp_no
AND s.from_date = e.hire_date
) a --员工入职时薪资情况
INNER JOIN ( SELECT emp_no, salary FROM salaries WHERE to_date = "9999-01-01" ) --当前情况
b ON a.emp_no = b.emp_no
ORDER BY
growth