牛客网数据库SQL实战20—— 查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth

牛客网数据库SQL实战20—— 查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth

题目描述

查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输入描述:

输出描述:

growth
28841

我的解答

select 
(
    select salary 
    from salaries
    where emp_no = 10001
    order by to_date desc
    limit 0,1
)
-
(
    select salary 
    from salaries
    where emp_no = 10001
    order by to_date 
    limit 0,1
)
as growth;

此题思路如下:

  1. 先分别找到emp_no=10001的员工的第一次工资记录与最后一次工资记录
  2. 再将最后一次工资记录减去第一次工资记录得到入职以来salary的涨幅,最后用别名growth代替

我觉得最好的答案

本题的另一种解法也能通过测试,但实际上不严谨,只有在员工最后一条工资记录为最大值时成立,如果最后一次的工资调整为降薪,则此思路通不过。具体思路如下:
1、直接找到emp_no=10001的员工的工资记录,将其最大工资减去最小工资得到涨幅

SELECT (MAX(salary)-MIN(salary)) AS growth 
FROM salaries WHERE emp_no = '10001'
发布了175 篇原创文章 · 获赞 58 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/sunbocong/article/details/105533367
今日推荐