[Oracle] 상위 n개 데이터를 추출하는 2가지 방법
- 데이터베이스/오라클
- 2022. 2. 15.
오라클에서 상위 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개의 행이 조회된다.