sql - Oracle显示所有工资高于部门平均水平的员工

标签 sql oracle plsql ora-00904

我正在编写一个查询来查找收入高于其部门平均工资的员工。我需要显示员工ID、工资、部门ID以及该部门的平均工资。

我有一个几乎可以工作的查询,但它一直给我“ORA-00904:“AVG_SAL”:无效标识符”错误。我这样做正确吗?为什么我会收到此无效标识符错误?

SELECT employee_id, salary, department_id,
  (SELECT ROUND(AVG(salary),2)
  FROM employees e_inner
  WHERE e_inner.department_id = e.department_id) AS avg_sal
FROM employees e
WHERE salary > avg_sal
ORDER BY avg_sal DESC

最佳答案

更有效地使用分析:

select employee_id, salary, department_id, avg_sal
from
(
  SELECT employee_id, salary, department_id, 
    round(avg(salary) over (partition by department_id), 2) avg_sal
  from emp
)
where salary > avg_sal
order by avg_sal desc

关于sql - Oracle显示所有工资高于部门平均水平的员工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992412/

相关文章:

sql - 根据 SQLite 中的日期对嵌套组进行排序

sql - postgresql:选择所有关联记录都匹配条件的记录

java - ORA-12899: 列的值太大,即使异常中的值较小

java - 写入数据库时​​出现异常(org.hibernate.exception.ConstraintViolationException)

mysql - SQL:每个字段值计数的输出表

sql - 获取 ORACLE 编程对象定义

SQL Server : search for table/column for a specific data

mysql - 当我们有 n 次在 00 :00:00 format 中时,如何在 mysql 中添加时间列表

oracle - 嵌套 block 对 PL/SQL 过程中的性能有影响吗?

oracle - 如何处理 pl/sql 中的 invalid_identifier 异常?