본문 바로가기
DataBase/Oracle

[Oracle] 오라클 KEEP 사용 방법 (RANK, DENSE_RANK / MAX, MIN, SUM, COUNT)

by 알쓸전잡 2025. 9. 5.
반응형

오라클에서 KEEP 을 사용하면 그룹(GROUP) 내에서 최대, 최저 순위 행(값)을 가져올 수 있습니다.

최대, 최저 순위의 값을 구하는 건 쉽지만, 해당 순위의 행의 다른 컬럼 값을 가져와야 하는 경우 KEEP 을 사용하면 서브쿼리를 사용하지 않아도 값을 가져올 수 있습니다.

 

KEEP을 사용할 때는 GROUP BY 절로 그룹을 지정하거나 OVER 절로 구분해야 합니다.

KEEP 기본 사용 방법 (GROUP BY)

 

그룹을 지정하는 경우 사용

SELECT DEPTNO
     , MAX(SAL) KEEP(DENSE_RANK LAST ORDER BY DEPTNO) AS SAL_LAST
     , MAX(JOB) KEEP(DENSE_RANK LAST ORDER BY SAL)    AS JOB_LAST
     , MAX(ENAME) KEEP(DENSE_RANK LAST ORDER BY SAL)  AS ENAME_LAST
    FROM EMP B
    GROUP BY DEPTNO

KEEP GROUP BY 사용 예제
KEEP GROUP BY 사용 예제

KEEP 기본 사용 방법 (OVER)

 

그룹을 지정하지 못하는 경우 사용

SELECT EMPNO
     , JOB
     , SAL
     , MAX(SAL) KEEP(DENSE_RANK LAST ORDER BY SAL) OVER(PARTITION BY JOB) AS SAL_MAX
     , MIN(SAL) KEEP(DENSE_RANK FIRST ORDER BY SAL) OVER(PARTITION BY JOB) AS SAL_MIN
    FROM EMP B
    ORDER BY JOB, SAL

KEEP OVER 사용예제
KEEP OVER 사용예제

 

KEEP (DENSE_RANK FIRST) - 최저 순위 값 가져오기
SELECT MAX(DNAME) KEEP(DENSE_RANK FIRST ORDER BY DEPTNO)    AS DNAME_FIRST
     , MAX(LOCATION) KEEP(DENSE_RANK FIRST ORDER BY DEPTNO) AS LOCATION_FIRST
    FROM DEPT A

 

 

KEEP (DENSE_RANK LAST) - 최대 순위 값 가져오기
SELECT MAX(DNAME) KEEP(DENSE_RANK LAST ORDER BY DEPTNO)    AS DNAME_LAST
     , MAX(LOCATION) KEEP(DENSE_RANK LAST ORDER BY DEPTNO) AS LOCATION_LAST
    FROM DEPT A

 

KEEP (DENSE_RANK) 를 사용할 때 최대, 최저 (FIRST, LAST) 및 정렬 순서 (ORDER BY) 를 확인해야 합니다.

이 부분을 헷갈리면 원하는 값이 반대로 도출될 수 있습니다.

KEEP DENSE_RANK FIRST, LAST 구분
KEEP DENSE_RANK FIRST, LAST 구분

 

MIN도 동일한 로직을 사용하므로 MIN 을 사용하면 MAX와 반대 값이 나오는 것이 아니므로 확인해서 사용해야 합니다.

MIN KEEP 결과
MIN KEEP 결과

 

그룹 함수 응용 (SUM, COUNT, AVG)
SELECT JOB
     , MAX(SAL) KEEP(DENSE_RANK LAST ORDER BY SAL)   AS SAL_MAX
     , MIN(SAL) KEEP(DENSE_RANK LAST ORDER BY SAL)   AS SAL_MIN
     , SUM(SAL) KEEP(DENSE_RANK LAST ORDER BY SAL)   AS SAL_SUM
     , COUNT(SAL) KEEP(DENSE_RANK LAST ORDER BY SAL) AS SAL_COUNT
    FROM EMP B
    GROUP BY JOB

KEEP 그룹 함수 예제
KEEP 그룹 함수 예제

 

MAX, MIN 를 포함하여 그룹함수는 모두 KEEP 사용이 가능합니다.

반응형