Language/SQL

[Oracle] 행 개수 제한

_윤 2023. 9. 25. 16:18
728x90

1. ROWNUM

상위 N개 행을 구하고 싶을 때, 다음과 같이 사용

SELECT *
FROM TABLE
WHERE ROWNUM <= N;

다만, 문제의 조건에 따라 특정 열을 기준으로 정렬 후 상위 N개의 행을 사용해야 한다면 다음과 같은 형태로 사용.

SELECT COL1
FROM (SELECT COL1
      FROM TABLE
      ORDER BY COL1 desc)
WHERE ROWNUM <= N;

 

2. FETCH FIRST {N} ROWS ONLY

 

OFFSET 스킵행 {ROW | ROWS} FETCH {FIRST | NEXT} {N | N PERCENT} {ROW | ROWS} {ONLY | WITH TIES}
  • 스킵행 : 상위 N개 행 스킵 후 다음 행 부터 출력
  • {ROW | ROWS} : ROW, ROWS 사용에 따른 차이 X
  • {FIRST | NEXT} : FIRST, NEXT 사용에 따른 차이 X
  • 스킵할 행이 없다면 FETCH 구문부터 사용
  • {N | N PERCENT} : 상위 N개, 상위 N PERCENT로, 사용 목적에 맞게 선택 필요
  • {ONLY | WITH TIES} : ONLY는 딱 지정한 개수의 행만 반환, WITH TIES는 제일 마지막 행에 대해 같은 순위를 갖는 모든 행 출력

 

 

EXPR 1) 상위 10개 행 추출, 상위 5개 행 스킵 O

SELECT *
FROM TABLE
OFFSET 5 ROWS FETCH FIRST 10 ROWS ONLY;

EXPR 2) 상위 10개 행 추출, 상위 행 스킵 X

SELECT *
FROM TABLE
FETCH FIRST 10 ROWS ONLY;

EXPR 3) 상위 10% 행 추출

SELECT *
FROM TABLE
FETCH FIRST 10 PERCENT ROWS ONLY;

EXPR 4) 상위 10개 행 동일한 순위 포함하여 추출

SELECT *
FROM TABLE
FETCH FIRST 10 ROWS WITH TIES;

 

728x90
반응형