Programming/Oracle2015. 11. 25. 11:52


오라클 분석함수 KEEP


형식

MAX(COL_A)|MIN(COL_A) KEEP(DENSE_RANK FIRST|LAST ORDER BY COL_B [ASC|DESC])


컬럼B를 기준으로 값을 정렬후 같은 레코드의 컬럼A값을 추출한다.  




MAX값을 가져올때 다른컬럼이 기준값이 되어 그컬럼의 순서에 따른 MAX값을 가져와야 할때

MAX() KEEP()을 사용하면 한줄로 간단하게 표현할수 있다. 


SELECT MAX(A)

FROM TMP

WHERE ROWNUM = 1

ORDER BY B


ROWNUM과 ORDER BY 를 사용하거나 

다른 분석함수를 이용해서 순위를 뽑아낸후 다시 SELECT 해야하지만


SELECT 

MAX(A) KEEP(DENSE_RANK FIRST ORDER BY B ASC)

FROM TMP

GROUP BY C


MAX KEEP을 사용하면 간단하게 표현이 가능하다.



EX) MAX(B)에 해당하는 C의값을 구하고 싶을때


WITH TMP AS (

SELECT 'A' A, 1 B , 2 C FROM DUAL UNION ALL

SELECT 'A' A, 2 B , 1 C FROM DUAL UNION ALL

SELECT 'B' A, 1 B , 2 C FROM DUAL UNION ALL

SELECT 'B' A, 2 B , 1 C FROM DUAL UNION ALL

SELECT 'C' A, 1 B , 3 C FROM DUAL UNION ALL

SELECT 'C' A, 2 B , 2 C FROM DUAL UNION ALL

SELECT 'C' A, 3 B , 1 C FROM DUAL

)

SELECT A

, MAX(B)

, MAX(C)

, MAX(C) KEEP(DENSE_RANK FIRST ORDER BY B DESC) AS MAX2

FROM TMP

GROUP BY A


결과:

A MAX(B) MAX(C) MAX2

--------------------

A    2       2       1

B    2       2       1

C    3       3       1   




'Programming > Oracle' 카테고리의 다른 글

오라클 월별누적합계 구하기  (0) 2015.12.01
오라클 substr  (0) 2015.11.27
오라클 락 해제, ORACLE LOCK  (0) 2015.11.03
오라클 TIMESTAMP를 활용한 데이터복구  (0) 2015.11.03
오라클에서 배열사용  (0) 2015.11.03
Posted by jvvj