[Oracle] 오라클 KEEP()함수 사용법 그룹함수로 조회한 행 중에 다른 컬럼 가져오는 방법

그룹 함수로 조회한 행 중에 다른 컬럼 가져오는 방법

쿼리를 짜다 보면 가장 큰, 가장 작은 값을 가져와야 할 때가 있다.

이럴 땐 MAX() 나 MIN()함수를 사용하여 해당 컬럼을 가져온다.

그런데, 이렇게 MAX 나 MIN 함수로 가져온 값이 있는 행 중에 다른 컬럼을 가져와야 한다면 어떻게 해야 할까?

KEEP의 사용법을 모르는 경우라면 서브쿼리를 사용하여 가져오려 할 것이다.

예)

SELECT 컬럼A FROM 테이블A

WHERE 컬럼B = (

SELECT MAX(컬럼B)

FROM 테이블A)

물론 값은 같다.

하지만 조건없이 구현이 가능하다.

KEEP()함수을 사용하여 보자.

예)

SELECT MAX(컬럼A) KEEP (DENSE_RANK FIRST ORDER BY 컬럼B DESC)

FROM 테이블A

설명은 하자면 컬럼B로 ORDER BY 한 후 가장 큰값이 있는 행의 컬럼A를 가져오는 것이다.

이처럼 간단한 경우라면 서브쿼리를 쓰던 KEEP() 함수를 쓰던 별 차이가 없어 보이지만

쿼리가 복잡해지고 서브에 서브쿼리를 사용할때 유용함

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다