题目描述:查找所有在职员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序。

个人思路:
只需要用salaries表就好。因为不能保证员工工资是一直增长的趋势(测试用例存在工资减少的情况,蛮符合实际的毕竟像是迟到啊、早退啊、这个月提成拿的少啊等情况)。所以max(salary)-min(salary)这样只能保证工资是一直增长的趋势时才能用。

先找到当前员工的emp_no

select emp_no
from salaries
where to_date="9999-01-01"

然后将salaries自联结,条件为相同的emp_no当前月对应下个月的记录。这样错开日期后可以用下个月工资-当前月工资来获得每次的工资涨幅,然后求和就好sum(t2.salary-t1.salary)as growth。

select t1.emp_no,
       sum(t2.salary-t1.salary)as growth
from salaries t1 join salaries t2
                   on t1.to_date=t2.from_date
                   and t1.emp_no=t2.emp_no
where t1.emp_no in
             (
                 select emp_no
                 from salaries
                 where to_date="9999-01-01"
             )
group by emp_no
order by growth