SQL练习:SQL21_较难
题目: 查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序
(注:可能有employees表和salaries表里存在记录的员工,有对应的员工编号和涨薪记录,但是已经离职了,离职的员工salaries表的最新的to_date!=‘9999-01-01’,这样的数据不显示在查找结果里面)
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL, -- '入职时间'
PRIMARY KEY (`emp_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`));
题解
# 1.连接salaries表1,通过当前时间,找到当前薪资
# 2.连接salaries表2,通过入职的时间,找到入职薪资
SELECT E.emp_no, S1.salary - S2.salary growth
FROM employees E
INNER JOIN salaries S1 ON E.emp_no = S1.emp_no AND S1.to_date = '9999-01-01'
INNER JOIN salaries S2 ON E.emp_no = S2.emp_no AND E.hire_date = S2.from_date
ORDER BY growth
## 这个是多表连接的写法。也可以通过分别SELECT到的子表,获取当前salary与入职的salary。
个人整理的笔记,仅供学习使用,有问题麻烦指正。
题目及解答思路均来源于:牛客网