본문 바로가기
Database/Oracle

[Oracle] GREATEST, LEAST 함수 / 최댓값, 최솟값 구하기

by 쿠쿠씨 2022. 11. 16.
반응형

여러 값들 중에서 최댓값, 최솟값을 구할 수 있는 GREATEST, LEAST 함수에 대해 알아보겠습니다.

MAX, MIN 함수도 최댓값, 최솟값을 구하는 함수이지만 차이점이 있습니다.

MAX, MIN 함수는 하나의 컬럼의 값 중 최댓값, 최솟값을 구하는 함수이고,

GREATEST, LEAST 함수는 여러 컬럼의 값을 비교하여 최댓값, 최솟값을 구하는 함수입니다.

 

GREATEST

GREATEST 함수는 최댓값을 구하는 함수로 인자 값들 중 가장 큰 값을 반환합니다.

 

형식

 

숫자 비교

SELECT GREATEST(1, 23, 45, 67) FROM DUAL	

-- 결과 : 67

 

문자 비교

문자를 비교할 때는 ASCII 코드 값으로 변환하여 값을 비교합니다.

SELECT GREATEST('A', 'B', 'C', 'a', 'b', 'c') FROM DUAL

-- 결과 : c
-- c의 ASCII 코드 값이 99로 가장 큽니다. 
-- A : 65, B : 66, C : 67, a : 97, b : 98, c : 99

 

날짜 비교

SELECT GREATEST(TO_DATE('2001-01-01','YYYY-MM-DD'), SYSDATE) FROM DUAL	

-- 결과 : 2022-11-16 오후 4:19:48

 

* GREATEST 함수를 이용하여 음수 값을 0으로 변환하기

WITH TEMP AS
(
    SELECT 1 AS COL1 FROM DUAL
    UNION ALL
    SELECT 2 FROM DUAL
    UNION ALL
    SELECT -1 FROM DUAL
    UNION ALL
    SELECT -2 FROM DUAL
)
SELECT COL1 FROM TEMP

/* 
COL1
----------
1
2
-1
-2
*/

SELECT GREATEST(COL1,0) AS COL1 FROM TEMP

/* 
COL1
----------
1
2
0
0
*/

 

LEAST

LEAST 함수는 최솟값을 구하는 함수로 인자 값들 중 가장 작은 값을 반환합니다.

 

형식

 

숫자 비교

SELECT LEAST(1, 23, 45, 67) FROM DUAL	

-- 결과 : 1

 

문자 비교

SELECT LEAST('a', 'b', 'c', 'd') FROM DUAL

-- 결과 : a

 

날짜 비교

SELECT LEAST(TO_DATE('2001-01-01','YYYY-MM-DD'), SYSDATE) FROM DUAL	

-- 결과 : 2001-01-01

 

주의사항

1.

GREATEST/LEAST 함수는 모든 인자들을 첫 번째 인자의 데이터 형식으로 변환한 후 값을 비교하여 최댓값/최솟값을 반환합니다. 

따라서 인자들 중 첫 번째 인자의 데이터 형식으로 변환할 수 없는 값이 있으면 오류가 발생합니다.

 

예시

SELECT GREATEST('a','A','C', 1) FROM DUAL

-- 결과 : a
-- a의 ASCII 코드 값이 97로 가장 큽니다. 1 : 49, A : 65, C  67, a : 97

숫자 1은 '1'로 변환이 가능합니다.

 

SELECT GREATEST(1,12,123,'1234') FROM DUAL

--결과 : 1234

'1234'는 숫자 1234로 변환이 가능합니다.

 

SELECT GREATEST(1,12,123,'a') FROM DUAL

-- 오류 ORA-01722: 수치가 부적합합니다

'a'는 숫자로 변환할 수 없으므로 오류가 발생합니다.

 

2.

인자 값들 중에 NULL이 있으면 NULL을 반환합니다.

 

예시

SELECT GREATEST(1,12,123,NULL) FROM DUAL	--결과 : NULL

SELECT LEAST(1,12,123,NULL) FROM DUAL		--결과 : NULL
반응형

댓글