본문 바로가기
DB/Oracle

[Oracle] 최대값, 최소값 구하기 / MAX, MIN

by 키튼햄 2023. 10. 12.

오라클에서 최대값과 최소값을 구하기 위해서는 집계함수 MAX(최대값), MIN(최소값)을 사용한다.

집계함수는 주로 GROUP BY 절과 함께 사용한다. 단, SELECT 절에 집계 함수만 있다면 GROUP BY 절이 없어도 사용 가능하다.

집계함수는 WHERE절에 직접 사용은 할 수 없다. 만약 사용하고 싶다면 서브쿼리를 이용해야한다.

 

 

최대값 구하기

형식)

SELECT  MAX(컬럼)

FROM  테이블명

 

 

최소값 구하기

형식)

SELECT  MIN(컬럼)

FROM  테이블명

 

 

예제)

PRODUCT테이블의 물품(GOODS)별로 가격(PRICE)의 최대값(MAX)와 최소값(MIN)을 조회.

SELECT GOODS
     , MAX(PRICE)
     , MIN(PRICE)
FROM PRODUCT
GROUP BY GOODS

 

 

 

서브쿼리에서 활용

예제1)

WHERE(조건절)에서 사용할 경우 서브쿼리를 사용한다.

최고 급여를 받는 직원을 조회. (출력시 직원의 이름, 직업, 해당직원의 급여가 출력된다.)

SELECT a.ename
     , a.job
     , a.sal
  FROM emp a
 WHERE a.sal = (SELECT MAX(sal)
                  FROM emp
               )

 

예제2)

SELECT 절에서 서브쿼리를 사용하여 최대값, 최소값을 조회할 수 있다.

조인을 하지 않고 추가로 값을 표시할 때 많이 사용한다.

SELECT a.ename
     , a.job
     , a.sal
     , (SELECT MAX(aa.sal) 
          FROM emp aa 
         WHERE aa.job = a.job) AS job_max_sal
     , (SELECT MIN(aa.sal) 
          FROM emp aa 
         WHERE aa.job = a.job) AS job_min_sal
 FROM emp a
 WHERE a.job IN ('MANAGER', 'SALESMAN')

 

 

 

PARTITION BY 절 활용

PARTITION BY 절은 GROUP BY 절과 비슷한 역할을 한다.

PARTITION BY 절을 사용하면 조회된 결과에서 최대값을 집계하여 표시하므로 전체 결과에서 최대값을 집계한 것과 약간의 차이가 발생할 수 있다.

생략하면 

 

형식)

SELECT  MAX(컬럼명)  OVER (PARTITION BY 컬럼명)

 

예제)

조회된 결과 중 직군별로 최고 급여를 집계하여 표시한 결과

SELECT a.ename
     , a.job
     , a.sal
     , MAX(a.sal) OVER (PARTITION BY a.job)
 FROM emp a
 WHERE a.job IN ('MANAGER', 'SALESMAN')

 

 

 


참고 블로그