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

         1、题目

MYSQL牛客刷题_mysql

        2、思路

        先找到员工刚入职时候的薪资情况存到一个临时表中,然后再找到员工现在的薪资情况存到另一个表中;最后将两者的薪资相减就能得到想要的结果

        3、错解

                可以从薪水表中看到里面存储有两个薪资,而其相减的结果就是我们所需要的;

对薪资表进行按照emp_no分组,然后再用薪资减薪资(这是我最开始的想法,其实是行不通的)之前的练习中,我们能进行的是列与列之间相减(也就是表的不同的属性进行的操作)不能同属性之间进行操作;所以要先将之前的薪资和现在的工资进行分开变成两个表,然后才能进行相减的操作;

        4、操作

                ①将两个表进行连接,连接的条件是员工编号,但是还有一个条件就是时间也要相等,这样得到的才是入职时的薪资情况,得到的表就是入职时的薪资表;

                ②将两个表进行连接,连接的条件是员工编号,但是还有一个条件就是时间要为‘9999-01-01’,因为这样代表的才是在职员工的薪资情况,也就是现在员工的薪资表;

                ③前面得到了入职的薪资表和现在的薪资表,将其薪资进行相减得到的就是涨幅了

        5、源码

select b.emp_no,(b.salary-a.salary) as growth 
from
(select e.emp_no,s.salary
from employees e left join salaries s
on e.emp_no = s.emp_no
and e.hire_date=s.from_date)a
inner join
(
select e.emp_no,s.salary
from employees e left join salaries s on e.emp_no = s.emp_no
where s.to_date = '9999-01-01'
)b
on a.emp_no=b.emp_no
order by growth