SQL 기본 및 활용

22. Top N 쿼리 — SQLD, ROWNUM 함정과 상위 N건 뽑기

CBT 전자문제집 편집팀
#SQLD#TopN#ROWNUM#ROW_NUMBER#FETCH FIRST

Top N 쿼리"상위 N건"을 뽑는 쿼리입니다(급여 상위 3명 등). 시험은 오라클 ROWNUM 이 정렬보다 먼저 매겨진다 는 함정을 결과 예측으로 자주 냅니다.

이 단원, 시험에서 어디에 나오나

  • 제2과목 「SQL 기본 및 활용」 단원입니다.
  • ROWNUM 함정(정렬 순서 문제)과 상위 N건 뽑는 방법이 출제 포인트입니다.

① ROWNUM 함정 — 정렬보다 먼저 매겨진다

ROWNUM 함정 도식. ROWNUM을 먼저 걸고 정렬하면 아무 3건이 나오고, 정렬을 인라인뷰로 먼저 한 뒤 ROWNUM을 걸어야 상위 3건이 나온다

그림 1. ROWNUM은 WHERE 단계(정렬 전)에 매겨집니다. 정렬을 서브쿼리로 먼저 끝낸 뒤 ROWNUM을 걸어야 상위 N건입니다. (자작 도식)

  • ROWNUM 은 결과 행에 읽히는 순서대로 번호를 매깁니다 — ORDER BY 보다 먼저.
  • 그래서 WHERE ROWNUM <= 3 ... ORDER BY 급여 DESC아무 3건을 뽑은 뒤 정렬 → 상위 3명이 아닙니다.
  • 정렬을 인라인뷰로 먼저 한 뒤 바깥에서 ROWNUM을 걸어야 합니다.
SELECT * FROM (SELECT * FROM 사원 ORDER BY 급여 DESC)
WHERE ROWNUM <= 3;   -- 급여 상위 3명

② ROWNUM의 또 다른 함정

  • ROWNUM = N(N>1) 은 결과가 없습니다. (첫 행이 1이어야 하는데 건너뛸 수 없음)
  • ROWNUM > 1 도 결과가 없습니다. → "N번째부터"가 필요하면 인라인뷰로 ROWNUM을 별칭 컬럼으로 만든 뒤 조건을 겁니다.

③ 상위 N건 뽑는 3가지 방법

Top N 3가지 방법 도식. ROWNUM 인라인뷰, ROW_NUMBER OVER, FETCH FIRST N ROWS ONLY

그림 2. ROWNUM(오라클)·ROW_NUMBER() OVER·FETCH FIRST N ROWS ONLY(표준). (자작 도식)

방법특징
ROWNUM오라클. 정렬 인라인뷰 후 사용
ROW_NUMBER() OVER순위로 필터. 그룹별 Top-N 도 가능
FETCH FIRST N ROWS ONLY표준 SQL(간결)

자주 틀리는 함정

  • ROWNUM 먼저, ORDER BY 나중 → 상위 N이 아님(정렬을 먼저).
  • ROWNUM = 3 → 결과 없음.
  • 그룹별 Top-N 은 ROWNUM으로 어렵고 ROW_NUMBER() OVER(PARTITION BY …) 가 적합.

한 장 정리 (암기 카드)

  • ROWNUM은 정렬보다 먼저정렬을 인라인뷰로 먼저 하고 바깥에서 ROWNUM <= N.
  • ROWNUM = N(N>1)·ROWNUM > 1 → 결과 없음.
  • 방법 3종: ROWNUM · ROW_NUMBER() OVER · FETCH FIRST N ROWS ONLY.
  • 그룹별 Top-N → ROW_NUMBER() OVER(PARTITION BY …).

참고 출처

CBT 전자문제집 편집팀

자격증 개념과 기출 유형을 쉽게 정리합니다.

관련 글