题解 | #查找在职员工自入职以来的薪水涨幅情况#
查找在职员工自入职以来的薪水涨幅情况
http://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5
解题思路:建立入职工资表和当前在职工资表,相减即所得
PS: 1.查找当前在职员工可以使用to_date > 当前系统时间的方法,囊括了9999-01-01和当前在职但不是永久合同的员工 2.计算了入职时或当前工资为空的情况,也许刚开始没给工资的不算涨幅?不过问题不大 3.使用了多列子查询查找的非聚合信息
select startsal.emp_no, (ifnull(finalsal.salary, 0) - ifnull(startsal.salary,0)) as growth
from (
select *
from salaries
where (emp_no, from_date) in (select emp_no, min(from_date) from salaries group by emp_no)
)startsal -- 入职工资表
join (
select *
from salaries
where (emp_no, from_date) in (select emp_no, max(from_date) from salaries group by emp_no)
and to_date > sysdate()
)finalsal -- 在职员工当前工资表
on (startsal.emp_no = finalsal.emp_no)
order by growth