[oracle] MIN, MAX에 해당하는 다른 컬럼값
Group By를 이용해 Min, Max 컬럼은 다들 쉽게 구했던 경험이 있을 것이다.
예를 들어 직원테이블에서 부서별로 가장 높은 월급을 구하는 쿼리는 다음과 같다.
SELECT MAX(SALARY)
, DEPT
FROM EMPLOYEE
GROUP BY DEPT
그렇다면 부서별 가장 높은 월급을 받는 직원의 이름을 알고 싶다면 어떻게 해야할까?
DENSE_RANK 를 이용할 수 있다.
쿼리는 다음과 같다.
SELECT MAX( EMP_NAME ) KEEP ( DENSE_RANK FIRST ORDER BY SALARY DESC ) MAX_SALARY_EMP -- 가장 높은 월급의 직원이름
, MIN( EMP_NAME ) KEEP ( DENSE_RANK LAST ORDER BY SALARY DESC ) MIN_SALARY_EMP -- 가장 낮은 월급의 직원이름
, DEPT
FROM EMPLOYEE
GROUP BY DEPT
결론
즉, 다음과 같이 일반화할 수 있다.
-- K가 가장 높은 값의 V
MAX( V ) KEEP ( DENSE_RANK FIRST ORDER BY K DESC )
-- K가 가장 낮은 값의 V
MIN( V ) KEEP ( DENSE_RANK LAST ORDER BY K DESC )
REFERENCES
댓글남기기