题目描述:查找所有在职员工自入职以来的薪水涨幅情况,给出员工编号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