데이터베이스/Today's Query

[Today's Query] 부서 평균 연봉보다 연봉이 높은 사원을 조회 (2025/01/06)

연화 2025. 1. 6. 18:42

문제

최신 연봉이 부서 최신 연봉의 평균보다 높은 사원을 조회하세요.

WITH LatestSalaries AS (
    SELECT 
        emp_no,
        salary,
        ROW_NUMBER() OVER (PARTITION BY emp_no ORDER BY from_date DESC) AS rn
    FROM 
        salaries
),
avgSalary AS (
    SELECT
        b.dept_no,
        AVG(a.salary) AS avg_salary
    FROM
        (SELECT emp_no, salary FROM LatestSalaries WHERE rn = 1) AS a
    JOIN
        dept_emp AS b ON a.emp_no = b.emp_no
    GROUP BY
        b.dept_no
)
SELECT
    q.emp_no,
    CONCAT(q.first_name, ' ', q.last_name) AS emp_name,
    q.gender,
    q.hire_date,
    r.dept_name,
    w.salary,
    p.avg_salary AS '부서 평균 연봉'
FROM
    employees AS q
JOIN
    (SELECT emp_no, salary FROM LatestSalaries WHERE rn = 1) AS w ON q.emp_no = w.emp_no
JOIN
    dept_emp AS e ON q.emp_no = e.emp_no
JOIN
    departments AS r ON e.dept_no = r.dept_no
JOIN
    avgSalary AS p ON r.dept_no = p.dept_no
WHERE
    w.salary > p.avg_salary
ORDER BY r.dept_no, w.salary DESC;
💡 ROW_NUMBER()
결과 집합의 파티션 내에서 각 행에 순차적인 정수를 할당하는 함수