Post

[SQL] Top N 쿼리

[SQL] Top N 쿼리

ROWNUM 슈도 컬럼


오라클의 ROWNUM은 컬럼과 비슷한 성격의 Pseudo Column으로서 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호다. 테이블이나 집합에서 원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용한다.

예제

예제에 사용되는 릴레이션은 아래와 같다.

EMP 릴레이션

EMP 릴레이션
  • 쿼리
1
2
3
4
5
6
7
8
9
SELECT A.ENAME
     , A.SAL
  FROM (
        SELECT ENAME
             , SAL
          FROM EMP
         ORDER BY SAL DESC
       ) A
 WHERE ROWNUM <= 3;
  • 결과

ROWNUM 예제


ROW LIMITING 절


오라클은 12.1버전, SQL Server는 2012 버전부터 ROW LIMITING 절로 Top N 쿼리를 작성할 수 있다. ROW LIMITING 절은 ANSI 표준 SQL 문법이다. 아래는 ROW LIMITING 절의 구문이다. ROW LIMITING 절은 ORDER BY 절 다음에 기술하며, ORDER BY 절과 함께 수행된다. ROW와 ROWS는 구분하지 않아도 된다.

1
2
[OFFSET offset {ROW | ROWS}]
[FETCH {FIRST | NEXT} [{rowcount | percent PERCENT}] {ROW | ROWS} {ONLY | WITH TIES}]
  • OFFSET offset : 건너뛸 행의 개수를 지정한다.
  • FETCH : 반환할 행의 개수나 백분율을 지정한다.
  • ONLY : 지정된 행의 개수나 백분율만큼 행을 반환한다.
  • WITH TIES : 마지막 행에 대한 동순위를 포함해서 반환한다.

예제

예제에 사용되는 릴레이션은 아래와 같다.

EMP 릴레이션

EMP 릴레이션
  • 쿼리
1
2
3
4
SELECT A.EMPNO
     , A.SAL
  FROM EMP
 ORDER BY SAL, EMPNO FETCH FIRST 5 ROWS ONLY;
  • 결과

ROW LIMITING 예제


읽어주셔서 감사합니다. 😊

Reference
SQL 전문가 가이드 - Kdata 한국데이터산업진흥원

This post is licensed under CC BY 4.0 by the author.