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

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

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
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务