查找所有员工自入职以来(当前时间为9999-01-01 )的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序 提示:请使用SELECT语句作答。
时间: 2024-10-23 08:02:12 浏览: 32
假设我们有一个名为`employees`的表,它包含了`emp_no`(员工编号), `salary`(初始薪水)以及`hire_date`(入职日期)等字段,你可以使用如下的SQL查询来获取员工自入职以来的薪水涨幅并按涨幅升序排列:
```sql
SELECT
emp_no,
((current_salary - initial_salary) / initial_salary) AS growth
FROM
(
SELECT
emp_no,
salary AS current_salary,
(SELECT MAX(salary) FROM employees WHERE hire_date <= '9999-01-01') AS initial_salary
FROM
employees
) subquery
ORDER BY
growth ASC;
```
这个查询首先通过嵌套查询找到每个员工最初的薪水(即他们在'9999-01-01'之前的最高薪水),然后计算当前薪水与初始薪水之间的涨幅。最后的结果将按照涨幅从低到高排序。
相关问题
有一个员工表employees简况如下: emp_no birth_date first_name last_name gender hire_date 10001 1953-09-02 Georgi Facello M 2001-06-22 10002 1964-06-02 Bezalel Simmel F 1999-08-03 有一个薪水表salaries简况如下: emp_no salary from_date to_date 10001 85097 2001-06-22 2002-06-22 10001 88958 2002-06-22 9999-01-01 10002 72527 1999-08-03 2000-08-02 10002 72527 2000-08-02 2001-08-02 请你查找在职员工自入职以来的薪水涨幅情况,给出在职员工编号emp_no以及其对应的薪水涨幅growth
可以通过联结两个表,计算每名员工的薪水涨幅情况。
SQL查询语句如下:
```
SELECT e.emp_no, (s.salary - s_prev.salary) AS growth
FROM employees e
JOIN salaries s ON e.emp_no = s.emp_no
JOIN salaries s_prev ON s.emp_no = s_prev.emp_no
AND s.from_date > s_prev.to_date
AND s_prev.to_date = (
SELECT MAX(to_date)
FROM salaries
WHERE emp_no = s.emp_no
AND to_date < s.from_date
)
WHERE s.to_date = '9999-01-01'
```
解释:
首先,我们联结了两个薪水表,使用了自连接,并且使用了子查询来获取员工上一次薪水记录的to_date,这是为了计算薪水涨幅。
然后,我们筛选出在职员工,即薪水表中to_date为9999-01-01的员工。
最后,我们计算每个员工的薪水涨幅,并且返回员工编号和涨幅。
有一个员工表employees简况如下: emp_no birth_date first_name last_name gender hire_date 10001 1953-09-02 Georgi Facello M 2001-06-22 10002 1964-06-02 Bezalel Simmel F 1999-08-03 有一个薪水表salaries简况如下: emp_no salary from_date to_date 10001 85097 2001-06-22 2002-06-22 10001 88958 2002-06-22 9999-01-01 10002 72527 1999-08-03 2000-08-02 10002 72527 2000-08-02 2001-08-02 请你查找在职员工自入职以来的薪水涨幅情况,给出在职员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序
可以使用SQL语句来查询在职员工自入职以来的薪水涨幅情况:
```sql
SELECT s.emp_no, (s.salary-s1.salary)/s1.salary AS growth
FROM salaries s
JOIN (
SELECT emp_no, salary
FROM salaries
WHERE to_date = '9999-01-01'
) s1 ON s1.emp_no = s.emp_no
JOIN employees e ON e.emp_no = s.emp_no
WHERE s.from_date = e.hire_date
ORDER BY growth ASC;
```
解释一下这个SQL语句:
首先,我们使用子查询来找到在职员工的初始薪水。这个子查询返回了所有to_date为'9999-01-01'的薪水记录,这些记录代表了每个员工目前的薪水水平。然后,我们通过JOIN将这个子查询的结果与salaries表连接起来,得到每个员工入职时的薪水。
接下来,我们将这个结果再与employees表连接起来,以获取每个员工的基本信息。我们使用了JOIN来将这些表连接起来,条件是它们都有一个共同的列emp_no。
最后,我们计算了每个员工的薪水涨幅,并将结果按照growth升序排序。
执行这个SQL语句,就可以得到在职员工自入职以来的薪水涨幅情况,以及每个员工的编号emp_no。
阅读全文