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

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

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

select emp_no, salary
from salaries
where to_date = '9999-01-01';

select employees.emp_no, salary
from salaries, employees
where salaries.emp_no = employees.emp_no
and hire_date = from_date;

select now_salary.emp_no as emp_no, (now_salary.salary-first_salary.salary) as growth
from
(select emp_no, salary from salaries where to_date = '9999-01-01') as now_salary,
(select employees.emp_no as emp_no, salary from salaries, employees where salaries.emp_no = employees.emp_no and hire_date = from_date) as first_salary
where now_salary.emp_no = first_salary.emp_no;

select emp_no, growth
from
(select now_salary.emp_no as emp_no, (now_salary.salary-first_salary.salary) as growth
from
(select emp_no, salary from salaries where to_date = '9999-01-01') as now_salary,
(select employees.emp_no as emp_no, salary from salaries, employees where salaries.emp_no = employees.emp_no and hire_date = from_date) as first_salary
where now_salary.emp_no = first_salary.emp_no) as eg
order by growth;

一直以来,我都在说这一个暂时想不好怎么来命名的方法,就是从最简单之处开始,一步步封装,最后就可以实现我们的需求。

这个方法的缺点,可能在于效率不高,或者说占内存较多。

但是,一旦掌握了这个方法,在我看来,这些需求真的没有什么困难的,不同之处只是在于花费的时间。

这道题也是如此。 分四步走:

  1. 根据薪水表查找当前在职员工的现阶段薪水与编号;
  2. 根据两个表联结,查找入职时的员工薪水和员工编号;
  3. 将2联结到1上,获得员工编号以及工资涨幅情况;
  4. 重新选择并排序。
MySQL试题答案解析 文章被收录于专栏

MySQL在线编程重点试题解析

全部评论
一开始,我在自己的MySQL上运行,在第三步时不能直接把order by growth添加到源代码中,于是才有了第四步。 但是,我现在回去尝试了一下,发现是可以直接添加到源代码中的,于是第四步可以省略了。
点赞 回复 分享
发布于 2021-09-24 21:30

相关推荐

qq乃乃好喝到咩噗茶:院校后面加上211标签,放大加粗,招呼语也写上211
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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