【MySQL】查找所有在职员工自入职以来的薪水涨幅情况,只用salaries表就OK
查找所有员工自入职以来的薪水涨幅情况
http://www.nowcoder.com/practice/fc7344ece7294b9e98401826b94c6ea5
题目描述:查找所有在职员工自入职以来的薪水涨幅情况,给出员工编号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
牛客题霸-SQL篇【Mysql】 文章被收录于专栏
少壮不努力,老大勤刷题