데이터베이스/Today's Query

[Today's Query] 1998년도 연봉 상위 10% 사원의 정보 조회(2025/01/03)

연화 2025. 1. 6. 18:34

문제

to_date가 1998년도인 연봉 상위 10% 사원의 정보 조회

WITH salary_ranked AS (
    SELECT 
        a.emp_no,
        a.first_name,
        a.last_name,
        b.salary,
        percent_rank() OVER (ORDER BY b.salary DESC) AS percentile
    FROM 
        employees AS a
    JOIN (
        SELECT 
            emp_no,
            salary
        FROM 
            salaries
        WHERE 
            YEAR(to_date) = 1998 -- 연도 필터링
    ) b ON a.emp_no = b.emp_no
)
SELECT 
    emp_no,
    first_name,
    last_name,
    salary,
    percentile
FROM 
    salary_ranked
WHERE 
    percentile <= 0.1
ORDER BY 
    salary DESC;
💡 WITH절(가상테이블)
서브쿼리를 만들고 재사용 가능한 공통 테이블 표현식(Common Table Expression, CTE)을 정의하는 방법
💡PERCENT_RANK함수
인수로 지정한 값의 그룹내 상대적 위치를 백분위수 순위로 반환하는 함수 (순위 퍼센트 반환)