利用左连接解决薪水共涨了多少

查找员工编号emp_no为10001其自入职以来的薪水salary涨幅(总共涨了多少)growth

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

使用左连接的方法,在salaries表的基础上,利用to_date = from_date的约束,给每条数据后面再加上此次涨幅后的工资,然后将两次的工资做差,就知道此次涨薪多少了;也就是说做连接之后表中就记录了涨薪前和涨薪后的工资各为多少,然后做差求和即可。

select sum(s2.salary-s1.salary)
    from salaries s1 , salaries s2
    where s1.emp_no = 10001
    and s1.to_date = s2.from_date
全部评论
这样的解题的前提是对于一个员工而言,入职离职是同一天,并且还需要加上s2.emp_no=10001这个条件
4 回复
分享
发布于 2020-09-17 17:48
这个思路太妙了,应该是本题的正解了,但是应该s1,s2都有一个emp_no = 10001的约束 select sum(s2.salary - s1.salary) from salaries s1 inner join salaries s2 on s1.emp_no = 10001 and s2.emp_no = 10001 and s1.to_date = s2.from_date;
3 回复
分享
发布于 2020-10-11 19:54
滴滴
校招火热招聘中
官网直投
/*直接聚合函数,大减小*/ select max(salary)-min(salary) growth from salaries where emp_no = 10001;
1 回复
分享
发布于 2020-11-18 21:38
这个有点疑问,做了左外连接后,s1表保留所有数据,s2表保留了除原始第一条salary外的所有数据,两表的salary相减的话,不是就保留s1表的当前salary的一条数据么。这感觉不对呀,求解我哪里理解出了问题
点赞 回复
分享
发布于 2020-08-12 16:15
您好,没有理解to_date = from_date这个约束,能够解释一下嘛
点赞 回复
分享
发布于 2020-08-28 23:59
select max(salary)-min(salary) as growth from salaries group by emp_no having emp_no=10001
点赞 回复
分享
发布于 2020-09-16 16:19
(2 - 1) + (4 - 3) + (3 - 2) = 4 - 1 老哥思路牛逼
点赞 回复
分享
发布于 2020-10-26 12:01
这个思路很牛
点赞 回复
分享
发布于 2020-10-28 23:46
确定对了吗?一般涨薪之后新的from_date和之前的to_date差一天吧。。。不过也是个思路啦
点赞 回复
分享
发布于 2020-11-18 14:33
厉害了思路清奇
点赞 回复
分享
发布于 2021-01-26 14:18

相关推荐

43 收藏 评论
分享
牛客网
牛客企业服务