출처: http://m.blog.yes24.com/metalzang/post/1785694
나누기 연산 하는 경우거나 평균값을 구하는 경우에 분모 값이 0 인 상태에서 연산을 하면 에러(ORA-01476)가 발생하는데...
이 경우 아래와 같은 예제를 활용하시면 해결하실 수 있습니다.
-- ORA-01476: 제수가 0 입니다.
-- 나누기 연산을 하여 값을 구하는 경우
select a/b result
from (select 100 a, 0 b from dual)
-- ORA-01476: 제수가 0 입니다.
-- 두개의 값에 따라 평균값을 구하는 경우
select avg(a/b) result
from (select 100 a, 0 b from dual)
-- NULLIF 함수를 사용하여 처리
-- 분모가 0 인 경우에 결과값은 0
select nvl(avg(a/nullif(b,0)),0) result
from (select 100 a, 0 b from dual)
-- 결과값 : 2, 0.5
select avg(200/100) result from dual
select avg(100/200) result from dual
-- DECODE 함수를 사용하여 처리.
select decode(b,0,0,null,0, a/b) result
from (select 100 a, 0 b from dual)
-- ORA-01476: 제수가 0 입니다.
-- AVG 함수를 사용하는 경우에는 분자/분모 모두 "0"이 아니여야 하므로
-- 아래와 같이 DECODE, NULLIF 함수를 사용하면 해결할 수 있음.
select decode(sum(b),0,0,null,0, avg(a/b)) result
from (
select 1001 a, 16 b from dual union all
select 2002 a, 10 b from dual
)
-- 131.38125 결과값
-- ROUND 함수로 인한 결과값 반올림(131.4)
select ROUND(decode(sum(b),0,0,null,0, avg(a/b)),1) result
from (
select 1001 a, 16 b from dual union all
select 2002 a, 10 b from dual
)
-- 131.38125 결과값
-- 지정한 소수점 단위로 절삭한다.(131.3)
select trunc(decode(sum(b),0,0,null,0, avg(a/b)),1) result
from (
select 1001 a, 16 b from dual union all
select 2002 a, 10 b from dual
)
'ORACLE > SQL' 카테고리의 다른 글
oracle table count 오라클 테이블 건수 확인 (0) | 2023.07.02 |
---|---|
오라클 Count over (0) | 2018.07.06 |
동시성제어 SELECT FOR UPDATE #1 (0) | 2013.03.01 |
Oracle EXISTS Versus IN (0) | 2010.06.18 |
NOT IN과 NOT EXISTS의 차이점 (0) | 2010.04.02 |