[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() 함수를 쓰던 별 차이가 없어 보이지만
쿼리가 복잡해지고 서브에 서브쿼리를 사용할때 유용함
최신 댓글