[Oracle] 상위 n개 데이터를 추출하는 2가지 방법

오라클에서 상위 3개, 5개, 10개, 100개 등 n개의 데이터를 뽑기 위해서는 서브 쿼리를 활용하면 쉽게 해결할 수 있다. 서브 쿼리(Inline View)를 사용하여 데이터를 먼저 정렬한 후, 원하는 개수만큼 데이터를 추출하면 된다. 대부분 ROWNUM 키워드를 사용하며, 특수한 경우에 순위 함수(DENSE_RANK)를 사용하여 순위를 부여한 후 순위로 데이터를 추출하기도 한다.

 

상위 n개의 행(ROW) 추출 방법

SELECT empno
     , ename
     , sal
  FROM (
         SELECT empno
              , ename
              , sal
           FROM emp
          ORDER BY sal DESC
       )
 WHERE ROWNUM <= 3

 

 

연봉(sal)이 높은 순서로 정렬한 후 ROWNUM을 사용하여 3개의 데이터만 추출하였다.

 

서브 쿼리를 사용하지 않고 하나의 쿼리문으로 작성해 보려고 할 수 있지만, WHERE절의 ROWNUM이 ORDER BY 절보다 먼저 실행되고 다시 정렬되므로 ROWNUM과 정렬 순서가 틀려지게 된다. 서브 쿼리에서 ORDER BY를 먼저 수행 후 ROWNUM을 사용해야 한다.

 

상위 순위 n개 추출 방법

SELECT empno
     , ename
     , sal
  FROM (
         SELECT empno
              , ename
              , sal
              , DENSE_RANK() OVER(ORDER BY sal DESC) AS rnk
           FROM emp
       )
 WHERE rnk <= 3

 

 

연봉(sal)이 높은 순서로 순위를 부여하고 3순위까지만 데이터를 추출하였다. 연봉이 동일한 경우 같은 순위를 부여하였기 때문에 4개의 행이 조회된다.

예제쿼리(테이블포함).txt
0.00MB

 

[Oracle] RANK, DENSE_RANK 순위 함수 사용법

오라클에서 성적, 급여, 매출 등 순위를 구하기 위해서 순위 함수(RANK, DENSE_RANK)를 사용하면 된다. 순위 함수의 순위는 OVER 함수 내부의 ORDER BY 컬럼 값으로 결정된다. RANK() : 중복 순위 개수만큼

gent.tistory.com

 

[Oracle] 조회 순번 매기는 방법 (ROWNUM, ROW_NUMBER())

1. ROWNUM 키워드 이용하는 방법  - 조회된 순서되로 순번을 매긴다. SELECT ROWNUM , a.* FROM emp a - ORDER BY 를 사용하면 순번이 뒤섞이므로 정렬된 서브쿼리 결과에 ROWNUM 을 매겨야 한다. SELECT ROWNUM..

gent.tistory.com

 

댓글

Designed by JB FACTORY