Sql Oracle-如何从子查询返回平均值?
我需要选择工资高于按部门分组的平均工资的员工Sql Oracle-如何从子查询返回平均值?,sql,oracle,group-by,Sql,Oracle,Group By,我需要选择工资高于按部门分组的平均工资的员工 SELECT * FROM employees WHERE salary > (SELECT AVG(salary), department_id FROM employees GROUP BY department_id) 它失败了,因为它返回了两列 我尝试了以下查询: SELECT * FROM employees HAVING salary > AVG(salary) GROUP BY (department_id) 现在我收到
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary), department_id FROM employees GROUP BY department_id)
它失败了,因为它返回了两列
我尝试了以下查询:
SELECT * FROM employees
HAVING salary > AVG(salary)
GROUP BY (department_id)
现在我收到错误消息:ORA-00979:不是一个groupby表达式最简单的跨数据库方法是使用连接:
SELECT employees.*
FROM employees
JOIN ( SELECT department_id, AVG(salary) avgSalary
FROM employees
GROUP BY department_id) departmentSalaries
ON employees.department_id = departmentSalaries.department_id
AND employees.salary > departmentSalaries.avgSalary
Oracle最有效的方法是使用分析函数(也称为窗口函数):
SELECT * FROM (
SELECT e.*, AVG(e.salary) OVER ( PARTITION BY e.department_id ) as avgSalary
FROM employees e) t
WHERE salary > avgSalary