Oracle show all employees with greater than average salary of their department

后端 未结 4 794
离开以前
离开以前 2020-12-11 23:02

I am writing a query to find employees who earn greater than the average salary within their department. I need to display the employee ID, salary, department id, and averag

4条回答
  •  伪装坚强ぢ
    2020-12-11 23:17

    You could rewrite it as a join:

    SELECT  e1.employee_id
    ,       e1.salary
    ,       e1.department_id
    ,       ROUND(AVG(e2.salary),2) as Avg_Sal
    FROM    employees e
    JOIN    employees e2
    ON      e2.department_id = e.department_id
    GROUP BY
            e1.employee_id
    ,       e1.salary
    ,       e1.department_id
    HAVING  e1.salary > ROUND(AVG(e2.salary),2)
    

    Or a subquery:

    SELECT  *  
    FROM    (
            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
            ) as SubqueryAlias
    WHERE   salary > avg_sal
    

提交回复
热议问题