본문 바로가기
IT정보

오라클 KEEP

by 디노프랭키 2023. 5. 7.
728x90

오라클 KEEP

오라클 KEEP이란?

오라클의 KEEP은 그룹함수와 같이 사용되는 SQL명령어입니다. 그룹함수 MIN, MAX와 주로 사용이 되며 다른 그룹함수 SUM이나 COUNT 등도 같이 사용할 수 있습니다. 그룹함수를 사용하게 되면 행의 위치와는 상관없이 칼럼에 여러 행의 값이 합쳐져서 보이게 그룹함수의 결괏값에 대한 행단 위로 동일한 값을 출력하고 싶을 때 KEEP을 사용하게 됩니다.

오라클 KEEP 구문

그룹함수(대상컬럼) KEEP(DENSE_RANK FIRST/LAST ORDER BY 정렬할 컬럼)

오라클 KEEP 사용예제

-- USERS 가상테이블 입니다.
 EDIT_DATE  EDIT_USER_NO
-------------------------------
  20230301      222
  20230204      111
  20230328      444
  20230420      333 
  
-- 5월 이전에 가장 마지막에 수정된 날짜와 수정자를 가져오는 쿼리입니다.
SELECT MAX(EDIT_DATE) AS EDIT_DATE
     , MAX(EDIT_USER_NO) AS EDIT_USER_NO1
     , MAX(EDIT_USER_NO) KEEP (DENSE_RANK FIRST ORDER BY EDIT_DATE DSEC) AS EDIT_USER_NO2
  FROM USERS
 WHERE EDIT_DATE BETWEEN '20230101' AND '20230501';
 
 -- 결과
  EDIT_DATE   EDIT_USER_NO1   EDIT_USER_NO2
---------------------------------------------------
  20230420         444             333

위의 결과를 보면 EDIT_USER_NO1 컬럼의 경우 MAX값만 사용하게 되면 EDIT_USER_NO칼럼 중에서 가장 큰 값만 출력을 하게 됩니다. 하지만 우리가 원하는 값은 가장 마지막에 수정된 날짜와 수정자를 보려고 하는 것입니다. 이런 경우 MAX(EDIT_DATE)에 해당하는 값을 찾기위해 KEEP 명령어를 사용하게 됩니다. 구문을 좀 더 자세히 살펴보면

MAX(EDIT_USER_NO) KEEP (DENSE_RANK FIRST ORDER BY EDIT_DATE DSEC) AS EDIT_USER_NO2

뒤에서부터 읽어오면 쉽게 이해가 되실겁니다. 수정일자 기준 내림차순으로 정렬을 한 대상중에 첫번째 컬럼의 수정자 정보를 가져오라는 구문입니다. MAX안에 포함되는 컬럼은 추출할 대상입니다. DENSE_RANK는 기본구문이며 FIRST는 정렬된 값 중에 첫번째 값을 가져오겠다는 소리 입니다. 뒷편에 ORDER BY는 수정일자 기준으로 내림차순으로 정렬합니다. 같은 값을 출력하지만 구문을 다르게 지정할 수도 있습니다.

MAX(EDIT_USER_NO) KEEP (DENSE_RANK LAST ORDER BY EDIT_DATE) AS EDIT_USER_NO2

차이점이 이해되시나요? 오름차순으로 정렬 후 가장 마지막에 데이터에 해당하는 수정자를 조회하는 쿼리입니다. 데이터의 성향에 맞게 FIRST/LAST 그리고 정렬기준을 가지고 데이터를 조합해서 원하는 결과를 출력 할 수 있습니다.

728x90

'IT정보' 카테고리의 다른 글

오라클 MINUS 중복체크  (43) 2023.05.10
오라클 WITH 임시테이블  (27) 2023.05.09
오라클 UNION과 UNION ALL의 차이  (0) 2023.05.05
오라클 동적 관리 뷰  (6) 2023.05.04
오라클 시스템 뷰 및 사용자 뷰  (2) 2023.05.03

댓글