【发布时间】:2022-11-14 04:32:11
【问题描述】:
我正在使用 Oracle 和 SQL Developer。我已经下载了 HR 模式,需要用它做一些查询。现在我正在与表员工一起工作。作为用户,我需要查看其工资与相应部门所有后来聘用的同事的平均工资之间差距最大的员工。这似乎很有趣,也很复杂。我已经阅读了一些文档并尝试过,例如 LEAD(),它可以同时提供对多行表的访问:
SELECT
employee_id,
first_name
|| ' '
|| last_name,
department_id,
salary,
hire_date,
LEAD(hire_date)
OVER(PARTITION BY department_id
ORDER BY
hire_date DESC
) AS Prev_hiredate
FROM
employees
ORDER BY
department_id,
hire_date;
这显示了部门中每个人的后来雇用人员的雇用率。我也尝试使用窗口子句来理解它的概念:
SELECT
employee_id,
first_name
|| ' '
|| last_name,
department_id,
hire_date,
salary,
AVG(salary)
OVER(PARTITION BY department_id
ORDER BY
hire_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS avg_sal
FROM
employees
ORDER BY
department_id,
hire_date;
这显示了当前行之前所有行和当前行的平均工资,因此如果我们部门中有 2 个人的工资分别为 13000 和 6000,我们将收到前 13000 和第二 (13000+6000)/2=9500 的 avg_sal等等。然而,这并不是我所需要的。我需要收到这样的东西:
应该如何查看我的查询以获得适当的结果(可以是具有分析功能的不同解决方案,但必须包含窗口子句)?
【问题讨论】: