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

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

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

方法)利用子查询找出当前工资及入职工资

SELECT s1.emp_no, (s1.salary - s2.salary)growth
FROM 
(SELECT emp_no, salary  -- 当前工资
FROM salaries
WHERE to_date = '9999-01-01')s1
JOIN
(SELECT s.emp_no, s.salary -- 入职工资
FROM salaries AS s JOIN employees AS e
ON e.emp_no = s.emp_no
AND e.hire_date = s.from_date)s2
ON s1.emp_no = s2.emp_no
ORDER BY growth;

21/3/24
方法2)第二次做发现一个更简单的方法

  • 入职工资 即 最低工资
select s1.emp_no, (s2.salary - min(s1.salary)) growth
from salaries as s1, salaries as s2
where s1.emp_no = s2.emp_no
and s2.to_date = '9999-01-01'
group by s1.emp_no
order by growth;
全部评论
题目没有表明入职工资就是最低工资
2 回复 分享
发布于 2022-05-11 23:13
to_date = 9999-01-01说明员工是在职状态,题目要求查询的就是在职员工
1 回复 分享
发布于 2022-07-25 15:39
怎么就直接带9999-01-01进去查啊,哪个条件说明了
点赞 回复 分享
发布于 2022-06-09 20:57
有可能第一个月就降薪也说不定呢
点赞 回复 分享
发布于 2022-08-01 19:02
第二个方法我测试出错了
点赞 回复 分享
发布于 2022-12-06 16:58 广东
第二个方法测试出错了呀
点赞 回复 分享
发布于 02-17 15:41 河南
第二个方法错了 ,因为group by ,你在前面必须是group By 包含的字段 或者是聚合函数。稍加修改一下 select s1.emp_no, (max(s2.salary) - min(s1.salary)) growth from salaries as s1, salaries as s2 where s1.emp_no = s2.emp_no and s2.to_date = '9999-01-01' group by s1.emp_no order by growth;
点赞 回复 分享
发布于 08-16 14:39 湖北

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 12:19
点赞 评论 收藏
分享
评论
26
收藏
分享
牛客网
牛客企业服务