题解 | #获取当前薪水第二多的员工的emp_no以及其对应的薪水salary#

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

http://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5

思路:当前工资 - 第一次发的工资(入职工资)= 成长工资

1、子查询生成当前工资表 to_date = '9999-01-01',第一次工资表 to_date = 最小日期;
2、当前工资表与第一次工资表左连接,left join;
3、成长工资growth = 当前工资 - 第一次工资 ;
4、按照成长工资排序, order by growth。
select 
sa.emp_no
,sa.salary - lo.l_sa growth -- 工资成长
from salaries sa
left join ( -- 与工作表左连接
    select -- 第一次工资
    emp_no,
    salary l_sa
    from salaries
    where (emp_no,to_date) in (
        select -- 第一次发工资日期
        emp_no
        ,min(to_date)
        from salaries
        group by emp_no -- 聚合函数必须加 group by 员工有工资调整会重复)) lo
on lo.emp_no = sa.emp_no
where sa.to_date = '9999-01-01'  -- 在职人员当前工资成长
order by growth

全部评论

相关推荐

LXXXXd:有点杂,想搞自动化的话没必要把法律的经历写上去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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