【359天】我爱刷题系列118(2018.01.30)

叨叨两句

  1. ~

SQL习题013

1

题目描述
查找员工编号emp_now为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));测试

本题严谨的思路以下:
一、先分别找到emp_no=10001的员工的第一次工资记录与最后一次工资记录
二、再将最后一次工资记录减去第一次工资记录获得入职以来salary的涨幅,最后用别名growth代替

SELECT ( 
(SELECT salary FROM salaries WHERE emp_no = 10001 ORDER BY to_date DESC LIMIT 1) -
(SELECT salary FROM salaries WHERE emp_no = 10001 ORDER BY to_date ASC LIMIT 1)
) AS growth

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

SELECT (MAX(salary)-MIN(salary)) AS growth 
FROM salaries WHERE emp_no = '10001'
相关文章
相关标签/搜索