오라클 SQL · 고급 질의

순위 함수: ROW_NUMBER, RANK, DENSE_RANK

순위 함수는 정렬된 데이터에 순서를 매긴다. 같은 값이 나왔을 때 번호가 어떻게 붙는지 이해하면 상위 N건 문제와 동점 처리 문제를 확실히 잡을 수 있다.

순위 함수: ROW_NUMBER, RANK, DENSE_RANK 대표 이미지

이 글에서 꼭 잡아야 할 것

순위 함수는 정렬된 데이터에 순서를 매긴다. 같은 값이 나왔을 때 번호가 어떻게 붙는지 이해하면 상위 N건 문제와 동점 처리 문제를 확실히 잡을 수 있다.

순위 함수는 단순 정렬을 넘어 순번을 데이터에 부여하는 단계다. 부서별 급여 상위 3명, 카테고리별 최신 글 1건처럼 실무에서 자주 필요한 문제를 간결하게 해결할 수 있다. 동점 처리 방식 차이를 명확히 기억하는 것이 가장 중요하다.

난이도 중급
모듈 고급 질의
학습 시간 10분
핵심 키워드 ROW_NUMBER, RANK, DENSE_RANK

개념 지도와 이해 포인트

ROW_NUMBER 동점이 있어도 순번을 무조건 1, 2, 3처럼 연속 부여한다. 상위 한 건만 남길 때 자주 사용한다.
RANK 동점이면 같은 순위를 주고 다음 순위는 건너뛴다. 1위가 둘이면 다음은 3위가 되는 방식이다.
DENSE_RANK 동점이면 같은 순위를 주되 다음 순위를 건너뛰지 않는다. 밀도 있는 순위가 필요할 때 유용하다.
순위 함수: ROW_NUMBER, RANK, DENSE_RANK 개념 다이어그램

대표 문법 패턴

SELECT employee_id,
       department_id,
       salary,
       ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rn,
       RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rnk,
       DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS drnk
FROM employees;

문법 읽는 포인트

  • 순위 함수는 반드시 정렬 기준이 필요하다.
  • 동점 처리 차이를 예시 데이터로 직접 비교해 두면 기억이 쉽다.
  • 상위 N건 추출은 보통 바깥 질의에서 순번 조건을 건다.

핵심 용어

  • ROW_NUMBER
  • RANK
  • DENSE_RANK

부서별 급여 상위 3명 구하기

상위 N건 문제는 먼저 윈도우 함수로 순번을 만들고, 바깥에서 필요한 순번만 남기는 2단계 구조로 읽으면 매우 안정적이다.

SELECT *
FROM (
  SELECT employee_id,
         department_id,
         salary,
         ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rn
  FROM employees
)
WHERE rn <= 3
ORDER BY department_id, rn;

수험 체크포인트와 자주 하는 실수

시험 체크포인트

  • ROW_NUMBER와 RANK의 차이는 동점 처리 여부와 순번 건너뜀 여부로 정리하자.
  • PARTITION BY가 있으면 그룹별 순위, 없으면 전체 순위다.
  • 상위 N건 문제는 정렬 기준을 먼저 확인해야 한다.

자주 하는 실수

  • 동점이 있는데도 ROW_NUMBER 결과를 순위처럼 해석하는 실수
  • RANK와 DENSE_RANK의 빈 순위 여부를 혼동하는 실수
  • 순위 함수 결과를 같은 SELECT에서 바로 WHERE로 필터링하려는 실수

연결 학습

순위 함수가 익숙해지면 구조적 데이터 표현으로 넘어갈 수 있다. 다음 챕터에서는 오라클 특유의 계층형 질의 CONNECT BY를 다룬다.

댓글 0

작성자 이름과 댓글 내용을 입력하면 바로 등록됩니다. 답글은 한 단계까지 지원하고, 댓글은 최대 200자까지 작성할 수 있습니다.

일반 댓글 작성

댓글을 불러오는 중입니다.

같은 카테고리에서 이어서 읽기

지금 읽은 글과 가까운 흐름의 글 5개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.