[Oracle] 오라클 최대값, 최소값 구하기 (MAX, MIN)
- 데이터베이스/오라클
- 2021. 6. 29.
오라클에서 최댓값과 최솟값을 구하기 위해서는 집계 함수 MAX(최대값), MIN(최소값)를 사용하면 된다. 집계 함수는 주로 GROUP BY 절과 함께 많이 사용하며, SELECT 절에 집계 함수만 있다면 GROUP BY 절이 없어도 사용이 가능하다. 집계함수(MAX, MIN)는 WHERE 절에 직접 사용은 할 수 없으며, 서브 쿼리와 같은 방법을 사용해야 한다.
최대값(MAX) 구하기
SELECT MAX(sal)
FROM emp
위의 예제는 사원 테이블 전체에서 최고 급여를 조회한 결과이다.
SELECT job
, MAX(sal)
FROM emp
GROUP BY job
위의 예제는 직군별 최고 급여를 조회한 결과이다.
GROUP BY 절을 사용하여 직군(job) 별로 급여(sal)의 최대값(MAX)을 집계하였다.
최소값(MIN) 구하기
SELECT MIN(sal)
FROM emp
위의 예제는 사원 테이블 전체에서 최저 급여를 조회한 결과이다.
SELECT job
, MIN(sal)
FROM emp
GROUP BY job
위의 예제는 직군별 최저 급여를 조회한 결과이다.
서브 쿼리에서 활용 (MAX, MIN)
SELECT a.ename
, a.job
, a.sal
FROM emp a
WHERE a.sal = (SELECT MAX(sal)
FROM emp
)
위의 예제는 최고 급여를 받는 직원을 조회한 결과이다.
MAX, MIN 함수는 서브 쿼리에서도 많이 활용된다.
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')
SELECT 절에서 서브쿼리를 사용하여 최대값, 최소값을 조회하는 예제이다.
조인을 하지 않고 추가로 값을 표시할 때 많이 사용한다.
PARTITION BY 절 활용 (MAX, MIN)
SELECT a.ename
, a.job
, a.sal
, MAX(a.sal) OVER (PARTITION BY a.job)
FROM emp a
WHERE a.job IN ('MANAGER', 'SALESMAN')
위의 예제는 조회된 결과 중 직군별로 최고 급여를 집계하여 표시한 결과이다.
서브 쿼리를 활용하여 최대값을 표시한 결과와 비슷하지만, PARTITION BY 절을 사용하면 조회된 결과에서 최대값을 집계하여 표시하므로 약간의 차이가 발생할 수 있다.
SELECT a.ename
, a.job
, a.sal
, MAX(a.sal) OVER ()
FROM emp a
WHERE job IN ('MANAGER', 'SALESMAN')
위의 예제는 조회된 결과의 급여 중 최고 급여를 표시한 결과이다.
PARTITION BY 절은 GROUP BY 절과 비슷한 역활을 하며, PARTITION BY 절을 생략하여 그룹을 정하지 않았기 때문에 조회된 결과 전체에서 최대값을 집계한다.