21.查找所有员工自入职以来的薪水涨幅情况

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

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

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

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
数据分析阿宇君的SQL题解 文章被收录于专栏

数据分析的SQL题目

全部评论
要最后一条记录中的钱减入职的钱
2 回复 分享
发布于 2021-12-18 12:09
没想明白,为什么现在的工资表不能直接拿salaries表加上where to_date=‘9999-01-01’就可以了。为何还要去连employees表?
7 回复 分享
发布于 2020-10-12 00:24
没有考虑离职的人员
2 回复 分享
发布于 2022-01-25 11:17
select emp_no, (max(salary)-min(salary)) as growth from salaries where emp_no = (select emp_no from salaries where to_date = '9999-01-01') group by emp_no order by growth asc
2 回复 分享
发布于 2021-11-03 17:14
https://www.nowcoder.com/share/jump/1704352663117 欢迎看看我的题解。窗口函数就可以搞定了。
1 回复 分享
发布于 2024-01-04 15:21 河北
对不起,是我不看题了,是在职员工
1 回复 分享
发布于 2022-10-25 09:42 广东
写了好久没考虑到降薪的情况,感谢解答很清晰易懂
1 回复 分享
发布于 2022-09-13 23:37 河北
我觉得这个有点缺陷to_date=不一定是9999-01-01,如果to_date一定是9999-01-01,那这题就不配困难好吧。万一有人离职了,但是依旧要算涨薪多少呢?可以帮我看看这个 select c2.emp_no, (c2.salary-c1.salary) growth from (select s1.emp_no, s1.salary from employees e1 join salaries s1 on e1.emp_no=s1.emp_no and e1.hire_date=s1.from_date) c1 join (select s2.emp_no, s2.salary,rank()over(partition by s2.emp_no order by to_date desc) as t from employees e2 join salaries s2 on e2.emp_no=s2.emp_no) c2 on c1.emp_no=c2.emp_no where t=1
1 回复 分享
发布于 2022-04-03 16:36
想问一下中间那里为什么一定要写成inner join 换成join就不对了
1 回复 分享
发布于 2021-08-23 20:51
请问一下,这里为什么一定要left join,inner join为什么不可以呢
1 回复 分享
发布于 2020-09-01 17:15
这么写为什么能保证是一一对应着减的而不是b的总薪水-a的总薪水呢?我好迷惑啊救命
点赞 回复 分享
发布于 2024-11-07 11:52 广东
博主的这个代码还需要加一个条件 growth>0 不然没有离职也没有涨工资的员工也会出现在结果中
点赞 回复 分享
发布于 2024-09-28 13:58 山东
为什么e.hire_date=s.from_date不能加在a表的where条件里呢,from后面的and是什么用法,求解答!
点赞 回复 分享
发布于 2024-05-24 08:43 陕西
select s1.emp_no,s2.salary-s1.salary growth from salaries s1 join salaries s2 on s1.emp_no =s2.emp_no and s1.to_date=s2.from_date where s2.salary> s1.salary order by growth 自测能通过,但是提交就报错,我用navicat测试也没问题啊,为啥,还有想不明白上面那个员工表有啥用,完全用不到啊
点赞 回复 分享
发布于 2024-01-18 16:32 美国
补充另一种做法: select distinct emp_no, (max(salary)-min(salary)) growth from salaries where emp_no in ( select emp_no from salaries where to_date='9999-01-01' ) and salary in ( select salary from employees e join salaries s on e.emp_no =s.emp_no where hire_date=from_date or to_date='9999-01-01' ) group by emp_no order by growth
点赞 回复 分享
发布于 2023-11-19 16:52 广东
select e.emp_no,a1.l_salary-a1.f_salary as growth from employees e inner join (select s1.emp_no as emp_no, s1.salary as f_salary, s2.salary as l_salary, s2.to_date as to_date from salaries s1 inner join salaries s2 on s1.to_date=s2.from_date ) as a1 on e.emp_no = a1.emp_no and a1.to_date='9999-01-01'order by growth asc
点赞 回复 分享
发布于 2023-09-02 11:50 上海
家人们 请问一下这样写错在哪儿啊,测试通过了,保存并提交不通过,但是预期输出和实际输出是一样的呀 select emp_no,max(salary)-min(salary) growth from salaries group by emp_no having max(to_date) = '9999-01-01' order by growth
点赞 回复 分享
发布于 2023-07-10 22:41 广东
现有工资也不一定就是日期等于9999-01-01的呀,这只能代表以后没有变化了,有的人的to_date不是9999-01-01,但是他现在也有工资呀
点赞 回复 分享
发布于 2023-02-23 15:45 广东
为什么能运行,中途离职的人怎么办?
点赞 回复 分享
发布于 2022-10-25 09:37 广东
想请问一下为什么求现工资要join员工表 哪儿哪儿都没用上啊
点赞 回复 分享
发布于 2022-09-05 05:44 浙江

相关推荐

不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
255
18
分享

创作者周榜

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