Oracle Select Top 1 조회 쿼리를 찾고 계신가요? top record(row)를 조회하려면 ROWNUM 또는 랭크 함수를 이용해야 합니다. 어떻게 해야 조회 결과를 얻을 수 있는지 확인해 보도록 합시다.
ROWNUM은 ORDER BY 이전에 순서를 할당하므로 "ROWNUM = 1"과 같이 임의의 스칼라 서브 쿼리 결과가 필요하지 않은 이상 적절하지 않은 선택입니다.
그리하여 랭크 함수를 통해 순위를 선택할 수 있습니다.
다음은 {EMP} 테이블에서 JOB별로 SAL을 내림차순 하여 2순위까지 구하는 예시입니다.
ROWNUM보다는 ROW_NUMBER가 순서를 제어할 수 있기에 추천하는 방법입니다.
SELECT *
FROM (SELECT ROW_NUMBER () OVER (PARTITION BY JOB ORDER BY SAL DESC)
AS RNUM,
EMP.*
FROM EMP)
WHERE RNUM <= 2
ORDER BY JOB, SAL DESC;
RNUM EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
1 7902 FORD ANALYST 7566 81/12/11 3000 20
2 7788 SCOTT ANALYST 7566 82/12/22 3000 20
1 7934 MILLER CLERK 7782 82/01/11 1300 10
2 7876 ADAMS CLERK 7788 83/01/15 1100 20
1 7566 JONES MANAGER 7839 81/04/01 2975 20
2 7698 BLAKE MANAGER 7839 81/05/01 2850 30
1 7839 KING PRESIDENT 81/11/17 5000 10
1 7499 ALLEN SALESMAN 7698 81/02/11 1600 300 30
2 7844 TURNER SALESMAN 7698 81/08/21 1500 0 30
9 개의 행이 선택되었습니다.