SQL练习20:查找员工编号emp_now为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`));
解法一
按照本题的要求没有降薪的话,那么就保证了他最后一次薪水必定是最高薪水,这样根据条件查询即可。
SELECT (MAX(salary) - MIN(salary)) as growth
FROM salaries
WHERE emp_no = '10001'
解法二
这种方式更加严谨,因为实际情况下,可能MAX()
获得的薪水并不是员工最后发放的薪水,即可能是降薪后才发的,那就可以根据日期来排序获取最早日期和最晚日期的薪水相减就可以得到涨幅。
SELECT ((SELECT salary FROM salaries
WHERE emp_no = 10001 ORDER BY from_date DESC LIMIT 0, 1) -
(SELECT salary from salaries
WHERE emp_no = 10001 ORDER BY from_date LIMIT 0, 1)) AS growth;