Oracle Select Top 1 By Group (오라클 그룹별 1순위 구하기)

Oracle Select Top 1 조회 쿼리를 찾고 계신가요? top record(row)를 조회하려면 ROWNUM 또는 랭크 함수를 이용해야 합니다. 어떻게 해야 조회 결과를 얻을 수 있는지 확인해 보도록 합시다.

Rank Function Select Top 1

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 개의 행이 선택되었습니다.

댓글