自闭了

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

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

搞不懂大家查询当前工资的时候为什么要用连接查询

验证时删除注释

select s1.emp_no,(s1.salary-e1.salary) as growth
from 
# 查询当前工资
(select emp_no,salary
from salaries
where to_date='9999-01-01') as s1 
# 内连接2次查询结果
inner join 
# 查询入职时候的工资
(select s.emp_no,s.salary
from salaries as s
inner join employees as e
on s.emp_no = e.emp_no and s.from_date=e.hire_date) as e1

on s1.emp_no=e1.emp_no
order by growth

我就想问你们怎么知道to_date=2099-01-01的?

我就想问你们怎么知道to_date=2099-01-01的?

我就想问你们怎么知道to_date=2099-01-01的?

我就想问你们怎么知道to_date=2099-01-01的?

我就想问你们怎么知道to_date=2099-01-01的?
我就想问你们怎么知道to_date=2099-01-01的?
全部评论
我想问的是入职时间和第一次薪水记录时间怎么可能相等?你入职第一天就发工资吗?
4 回复 分享
发布于 2020-05-24 10:39
楼主的答案是无法通过测试的,没有考虑不在职员工(to_date!='9999-01-01')的信息
4 回复 分享
发布于 2020-04-07 17:34
涨幅是现在的与入职相比,当不知道的时候就要求最高的日期,考虑中间离职的涨幅,没有一点意义,系统默认9999-01-01,所以结果一样,这道题应该说9999-01-01
3 回复 分享
发布于 2019-11-17 00:00
前面题的后遗症😂😂
2 回复 分享
发布于 2020-02-25 22:53
难道to_date不是等于9999-01-01吗? 难道to_date不是等于9999-01-01吗? 难道to_date不是等于9999-01-01吗? 难道to_date不是等于9999-01-01吗? 难道to_date不是等于9999-01-01吗? 难道to_date不是等于9999-01-01吗?(手动狗头)
1 回复 分享
发布于 2021-07-17 17:13
哈哈哈哈哈 答主严谨点 to_date这里是9999-01-01 不是to_date=2099-01-01🐶(手动狗头)
1 回复 分享
发布于 2020-12-01 13:26
做过前面的题就知道to_date='9999-01-01'是默认,表示当前的条件
1 回复 分享
发布于 2019-11-14 19:39
看你这几句灵魂拷问,要被你笑死,哈哈哈哈哈哈
13 回复 分享
发布于 2019-11-06 21:30
终于找到跟我有同样疑问的人
8 回复 分享
发布于 2019-11-02 19:24
因为前面的题有说,😂😂😂当前就是用9999-01-01表示,应该意思是到永远?哈哈哈哈嗝
6 回复 分享
发布于 2019-10-09 11:01
没有离职的是9999-01-01,如果已经离职了就不是了。所以用这个日期查询出来的结果是只能查询出未离职人群的工资
2 回复 分享
发布于 2021-06-02 09:39
为什么不是9999-12-31还是9999-01-01(手动狗头)
点赞 回复 分享
发布于 2024-06-27 15:34 上海
只要不降薪两次查询工资都不要join吧。 select c.emp_no,(t.salary-c.salary) growth from (select s.emp_no,MIN(s.salary) salary from salaries s group by s.emp_no) c join (select s1.emp_no,s1.salary from salaries s1 where to_date = '9999-01-01') t on c.emp_no = t.emp_no order by growth;
点赞 回复 分享
发布于 2024-04-06 16:55 陕西
可以看看这个解法 https://www.nowcoder.com/discuss/572441130474733568?sourceSSR=users
点赞 回复 分享
发布于 2024-01-05 15:49 河北
因为to_date就是指依然在职,不再进行薪水调整了,也就是说当to_date=9999-01-01时,对应的salary就是他现在的薪水了
点赞 回复 分享
发布于 2023-08-22 15:01 广东
题目里的要求是查询所有【在职】员工,那在职员工的最新数据就是有一条9999-01-01,如果员工离职了,自然就会有一条当前日期的数据。而这条数据自然也就被忽略
点赞 回复 分享
发布于 2023-08-01 11:48 上海
成功被楼主这灵魂几连问逗笑咯
点赞 回复 分享
发布于 2023-05-18 19:36 上海
不知道可以用一下窗口函数,求每个员工最大日期,然后to_date=最大日期的就是当前薪水了
点赞 回复 分享
发布于 2023-02-21 14:53 广东
to_date=2099-01-01可以替换成to_date>date_format(now(),'%Y-%m-%d');
点赞 回复 分享
发布于 2022-07-08 11:17
要求算在职员工的
点赞 回复 分享
发布于 2022-04-10 14:42

相关推荐

03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
评论
138
7
分享

创作者周榜

更多
牛客网
牛客企业服务