SQL练习27:给出每个员工每年薪水涨幅超过5000的员工编号emp_no
题目描述
- 题目描述
- 考察知识点
- 解题思路
给出每个员工每年薪水涨幅超过5000的员工编号 emp_no
、薪水变更开始日期 from_date
以及薪水涨幅值 salary_growth
,并按照 salary_growth
逆序排列。 提示:在 sqlite
中获取 datetime
时间对应的年份函数为 strftime('%Y', to_date)
(数据保证每个员工的每条薪水记录 to_date-from_date=1
年,而且同一员工的下一条薪水记录 from_data=
上一条薪水记录的 to_data
)。
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 salaries VALUES(10001,52117,'1986-06-26','1987-06-26');
INSERT INTO salaries VALUES(10001,62102,'1987-06-26','1988-06-25');
INSERT INTO salaries VALUES(10002,72527,'1996-08-03','1997-08-03');
INSERT INTO salaries VALUES(10002,72527,'1997-08-03','1998-08-03');
INSERT INTO salaries VALUES(10002,72527,'1998-08-03','1999-08-03');
INSERT INTO salaries VALUES(10003,43616,'1996-12-02','1997-12-02');
INSERT INTO salaries VALUES(10003,43466,'1997-12-02','1998-12-02');
考察知识点
自联结、ORDER BY
,时间运算。
根据题目的要求,可以连接两个工资表,然后根据根据时间和薪资涨幅筛选数据,最后根据 salary_growth
列进行排序。
SELECT s1.emp_no, s2.from_date, (s2.salary - s1.salary) AS salary_growth
FROM salaries AS s1 INNER JOIN salaries AS s2
ON s1.emp_no = s2.emp_no
WHERE YEAR(s2.to_date) - YEAR(s1.to_date) = 1
AND s2.salary - s1.salary > 5000
ORDER BY salary_growth DESC
题目来源:牛客网-SQL数据库实战题
✅ 每日打卡,❤ 点个赞再走吧!!!❤ 后续会继续分享 Mysql 方面的文章,如果感兴趣的话可以点个关注不迷路哦~。