반응형
여러 값들 중에서 최댓값, 최솟값을 구할 수 있는 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
반응형
'Database > Oracle' 카테고리의 다른 글
[Oracle] 여러 행 SELECT하여 INSERT 하기 / INSERT INTO SELECT 문 (0) | 2022.10.06 |
---|---|
[Oracle] 몫, 나머지 구하기 (/, MOD, FLOOR()) (0) | 2022.09.30 |
[Oracle] 올림 함수 CEIL() / 내림 함수 FLOOR() / 반올림 함수 ROUND() (0) | 2022.09.29 |
[Oracle] ORDER BY NULLS FIRST, NULLS LAST / NULL값 정렬하기 (0) | 2022.09.29 |
[Oracle] NVL, NVL2 함수 사용법 / null 값 처리 (0) | 2022.09.22 |
댓글