首页 > 试题广场 >

查找在职员工自入职以来的薪水涨幅情况

[编程题]查找在职员工自入职以来的薪水涨幅情况
  • 热度指数:556646 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工表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

请你查找在职员工自入职以来的薪水涨幅情况(注意这里强调的是在职员工),给出在职员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序,以上例子输出为
(注: to_date为薪资调整某个结束日期,或者为离职日期,to_date='9999-01-01'时,表示依然在职,无后续调整记录)
emp_no growth
10001 3861
示例1

输入

drop table if exists  `employees` ; 
drop table if exists  `salaries` ;
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`));
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','2001-06-22');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1999-08-03');
INSERT INTO salaries VALUES(10001,85097,'2001-06-22','2002-06-22');
INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1999-08-03','2000-08-02');
INSERT INTO salaries VALUES(10002,72527,'2000-08-02','2001-08-02');

输出

emp_no|growth
10001|3861
头像 数据分析阿宇君
发表于 2020-08-21 16:44:18
查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序 select b.emp_no,(b.salary-a.salary) as growth from (select e.emp_no,s.salary from emplo 展开全文
头像 猪客
发表于 2019-10-02 10:51:36
搞不懂大家查询当前工资的时候为什么要用连接查询 验证时删除注释 select s1.emp_no,(s1.salary-e1.salary) as growth from # 查询当前工资 (select emp_no,salary from salaries where to_date='9 展开全文
头像 N刻后告诉你
发表于 2020-05-17 15:25:24
题目:查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序解题要领:构建现在的工资表和入职的工资表,然后做差隐含题意:现在对应的时间是to_date=‘9999-01-01’,入职则需要利用employees表的hire_date 展开全文
头像 horsemuzi
发表于 2020-10-11 17:27:58
本题应该考虑降薪的问题: 题中没有讲员工不降薪,所以不能直接使用最大薪水-最小薪水求值,例如:我入职薪水100元,过程中降薪20元,现在工资80元,那么按照(最大薪水-最小薪水求值),薪水还涨了20元,但实际是降薪20元,所有有错误。 实际应该使用最后记录薪水-入职时薪水(80-100) 展开全文
头像 shikong
发表于 2021-03-17 11:18:10
select s1.emp_no, s2.salary-s1.salary growthfrom salaries s1inner join salaries s2 on s1.emp_no = s2.emp_nowhere s2.to_date='9999-01-01'group by s1.em 展开全文
头像 马小舍
发表于 2020-12-20 16:15:31
问题描述:查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序(注:可能有employees表和salaries表里存在记录的员工,有对应的员工编号和涨薪记录,但是已经离职了,离职的员工salaries表的最新的to_date!= 展开全文
头像 高质量搬砖人
发表于 2021-01-30 09:51:56
方法)利用子查询找出当前工资及入职工资 SELECT s1.emp_no, (s1.salary - s2.salary)growth FROM (SELECT emp_no, salary -- 当前工资 FROM salaries WHERE to_date = '9999-01-01')s 展开全文
头像 此用户名涉嫌违规
发表于 2021-04-08 12:02:22
题目描述:查找所有在职员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序。 个人思路:只需要用salaries表就好。因为不能保证员工工资是一直增长的趋势(测试用例存在工资减少的情况,蛮符合实际的毕竟像是迟到啊、早退啊、这个月提成拿的少 展开全文
头像 罗泽铭
发表于 2021-03-27 11:55:53
对于每个员工,自入职以来的薪水涨幅是:当前的薪水-入职时的薪水。但是有个误区要先指出来,不是最高薪水 - 最低薪水(存在降薪的可能;如果是查找最大的一次涨薪幅度,可以使用表自连接完成) 找到当前薪水和入职时的薪水有3种思路: (最直接但最慢)通过连接employees表的hire_date找到初始 展开全文
头像 毛小兔
发表于 2020-09-07 20:55:42
分为两张表一张入职薪资表一张现在薪资表再将两者内连接【inner join】起来,组成一张新表 select p.emp_no,q.salary-p.salary as growth from (select a.emp_no,a.salary from salaries a inner join 展开全文