Menu
Coddy logo textTech

그룹별 Top-N

Coddy SQL 여정의 심화 과정 섹션에 포함된 레슨 — 27개 중 23번째.

"부서별 최고 급여 수령자"는 전형적인 예시입니다. 해결 방법은 항상 PARTITION BYROW_NUMBER()를 사용한 다음, 1행으로 필터링하는 것입니다.

WITH ranked AS (
    SELECT name, department, salary,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
    FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1

상위 1위 대신 상위 3위를 원하시나요? WHERE rn = 1WHERE rn <= 3으로 변경하세요. 상위권에서 공동 순위를 허용하고 싶으신가요? ROW_NUMBER()RANK()로 바꾸세요.

challenge icon

챌린지

쉬움

사용 가능한 테이블 및 컬럼:

  • <strong>employees</strong>: <strong>id</strong>, <strong>name</strong>, <strong>department</strong>, <strong>salary</strong>

department에서 가장 높은 급여를 받는 직원을 반환하세요. name, department, salary를 출력하고, department를 기준으로 정렬하세요. 만약 한 부서 내에서 최고 급여자가 두 명 이상인 경우, id가 낮은 한 명만 반환하세요.

치트 시트

그룹별로 상위 N개의 행을 가져오려면 ROW_NUMBER()PARTITION BY를 사용한 다음 필터링하세요:

WITH ranked AS (
    SELECT name, department, salary,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
    FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1
  • 상위 3개를 가져오려면 WHERE rn = 1WHERE rn <= 3으로 변경하세요
  • 공동 순위를 허용하려면 ROW_NUMBER()RANK()로 바꾸세요

직접 해보기

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

심화 과정의 모든 레슨