오라클에서 최대값과 최소값을 구하기 위해서는 집계함수 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')
참고 블로그
'DB > Oracle' 카테고리의 다른 글
[Oracle] 날짜정보 추출 함수 / EXTRACT (0) | 2023.10.12 |
---|---|
[Oracle] 문자열 형변환 / TO_CHAR 함수 (날짜 포맷, 소수점, 천단위 콤마) (0) | 2023.10.12 |
[Oracle] 오라클 NULL값에 다른 데이터 출력하기 / NVL(), NVL2() (0) | 2023.10.11 |
[Oracle] SELECT문 NULL 값 조회 / IS NULL, IS NO NULL (0) | 2023.10.11 |
[Oracle] 오라클 문자를 날짜로 변환 / TO_DATE (0) | 2023.10.11 |