Contents
내가 작성한 쿼리
지난 세 번의 리뷰를 통해 꾸준히 성과를 향상시킨 직원들을 찾기 위한 솔루션을 작성하세요.
* 직원이 고려해야 할 리뷰가 최소 3개 이상 있어야 합니다
* 직원의 마지막 3개 리뷰는 엄격하게 증가하는 평점을 표시해야 합니다(각 리뷰는 이전보다 더 나은 평점)
* 각 직원에 대해 리뷰 날짜를 기준으로 최신 3개의 리뷰를 사용하세요
* 지난 3개의 리뷰 중 최신 평점과 가장 이른 평점의 차이로 개선 점수를 계산합니다
결과 표를 내림차순으로 개선 점수 순으로, 그리고 오름차순으로 이름 순으로 반환합니다.
내가 작성한 쿼리
MySQL, Oracle
-- 직원별 리뷰에 순위를 부여 (가장 최근 리뷰가 rn = 1)
WITH RankedReviews AS (
SELECT
employee_id,
review_date,
rating,
ROW_NUMBER() OVER (PARTITION BY employee_id ORDER BY review_date DESC) AS rn
FROM performance_reviews
),
-- 최근 3개의 리뷰만 필터링
LastThreeReviews AS (
SELECT *
FROM RankedReviews
WHERE rn <= 3
),
-- 3개의 리뷰를 하나의 행으로 변환 (가장 오래된 리뷰 → 중간 → 가장 최신)
Grouped AS (
SELECT
employee_id,
MIN(CASE WHEN rn = 3 THEN rating END) AS oldest_rating,
MIN(CASE WHEN rn = 2 THEN rating END) AS middle_rating,
MIN(CASE WHEN rn = 1 THEN rating END) AS latest_rating
FROM LastThreeReviews
GROUP BY employee_id
),
-- 리뷰 점수가 점점 향상된 직원만 필터링 + 개선 점수 계산
Improved AS (
SELECT
g.employee_id,
e.name,
(latest_rating - oldest_rating) AS improvement_score
FROM Grouped g
JOIN employees e ON e.employee_id = g.employee_id
WHERE
oldest_rating < middle_rating AND
middle_rating < latest_rating
)
-- 최종 결과 출력: 개선 점수 내림차순, 이름 오름차순
SELECT *
FROM Improved
ORDER BY improvement_score DESC, name ASC;
Share article