오라클 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 그리고 정렬기준을 가지고 데이터를 조합해서 원하는 결과를 출력 할 수 있습니다.
'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 |
댓글