(困难)SQL练习27:给出每个员工每年薪水涨幅超过5000的员工编号emp |
您所在的位置:网站首页 › 编号no: › (困难)SQL练习27:给出每个员工每年薪水涨幅超过5000的员工编号emp |
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'); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 考察知识点自联结、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 1 2 3 4 5 6题目来源:牛客网-SQL数据库实战题 ✅ 每日打卡,❤ 点个赞再走吧!!!❤
文章来源: blog.csdn.net,作者:Dream丶Killer,版权归原作者所有,如需转载,请联系作者。 原文链接:blog.csdn.net/qq_43965708/article/details/113608403 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |