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

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

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

本题应该考虑降薪的问题:
题中没有讲员工不降薪,所以不能直接使用最大薪水-最小薪水求值,例如:我入职薪水100元,过程中降薪20元,现在工资80元,那么按照(最大薪水-最小薪水求值),薪水还涨了20元,但实际是降薪20元,所有有错误。
实际应该使用最后记录薪水-入职时薪水(80-100),涨幅为-20元

-- 本题应该考虑降薪的问题:题中没有讲员工不降薪,所以不能直接使用最大薪水-最小薪水求值
SELECT 
  s1.emp_no,
  s2.salary - s1.salary AS growth 
FROM
  (SELECT 
    e.emp_no,
    s.salary 
  FROM
    employees e 
    LEFT JOIN salaries s 
      ON e.emp_no = s.emp_no 
  WHERE e.hire_date = s.from_date) AS s1  -- 入职薪水
  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') AS s2  -- 现在薪水
    ON s1.emp_no = s2.emp_no  
ORDER BY growth 
全部评论
不够完美,这个只能算一次涨幅。多次涨幅怎么办
1 回复 分享
发布于 2021-10-19 20:51
根据题目给的输出结果来看并没有降薪的人员,最低的也是0。为什么最大-最小没有通过呢? select s.emp_no , max(s.salary)- min(s.salary) as growth from employees e left join salaries s on e.emp_no = s.emp_no where e.emp_no in (select distinct a.emp_no from salaries a where a.to_date = '9999-01-01') group by e.emp_no order by growth asc
1 回复 分享
发布于 2020-10-16 00:10
新手还没什么思路,看了题主的学习一下。 首选题目要求涨幅,这时候就想到现在的薪水-入职的信息 这两个信息在一张表当中,因此考虑将提取salary当中的信息出来变为两行表。 第一张表首先是入职的薪水,就用到员工的表其hire_date等于from_date,就是入职的。 第二张表一样,只是判断条件不同。 最后再将这两张表连接起来,获得结果。
点赞 回复 分享
发布于 2024-10-12 11:05 广东
万一有两个员工同一天入职呢
点赞 回复 分享
发布于 2023-01-24 14:24 江苏
涨幅有歧义,是以入职与现在的时间点为准还是最低和最高为准
点赞 回复 分享
发布于 2022-12-02 21:57 山西
为什么要把s1和s2再连一次?
点赞 回复 分享
发布于 2021-12-28 10:42
万一这个人离职了,那s.to_date = '9999-01-01'是不对的吧
点赞 回复 分享
发布于 2021-09-03 21:39
这是不是只考虑了一次涨幅,万一他多次转部门,薪资涨幅有几次呢
点赞 回复 分享
发布于 2021-08-28 20:26

相关推荐

一天代码十万三:这都不能算简历吧
点赞 评论 收藏
分享
评论
55
1
分享

创作者周榜

更多
牛客网
牛客企业服务