题解 | #查找在职员工自入职以来的薪水涨幅情况#
查找在职员工自入职以来的薪水涨幅情况
https://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5
第一种解法
只使用salaries一张表,使用group by 按照emp_no进行分组,使用having加限制条件--emp_no in (select distinct emp_no from salary where to_date = '9999-01-01')以保证查找的员工都是在职状态。在select中使用(max(salary)-min(salary))获取涨幅即可。
select emp_no,(max(salary) - min(salary)) as growth
from salaries
group by emp_no
having emp_no in (
select distinct emp_no
from salaries
where to_date = '9999-01-01'
)
第二种解法
用employees连接salaries,连接条件为e.emp_no = s.emp_no and e.hire_date = s.from_date,接着select emp_no,salary
,找出每个员工入职时的薪资以及对应的员工编号,将这张彪作为临时表t1
再用t1连接(select emp_no,salary from salary where to_date='9999-01-01') t2 这张表,连接条件为t1.emp_no = t2.emp_no
确保1:找出来的员工都是在职状态,2:找出在职员工目前的工资
select t1.emp_no,(t2.salary-t1.salary) from
(
#找出所有员工的入职薪资
select e.emp_no,s.salary from employees e join salaries s on e.emp_no = s.emp_no and e.hire_date = s.hire_date) t1
) t1
join
(
#找出在职员工的当前薪资
select emp_no,salary from salaries where to_date='9999-01-01'
) t2
#找出在职员工的当前薪资和入职薪资
on t1.emp_no=t2.emp_no
深信服公司福利 882人发布