[SQL] 집계함수(SUM)를 사용 할 때 값이 다른이유? (소수점오차...) 0 3 2,966

by 쿼리냠냠 [SQL Query] [2018.11.15 15:36:54]


구루비 회원님들 안녕하세요.

최근 통계쿼리를 만들고 있는데 약간(?)의 의문점이 생겨 문의드립니다.

쿼리는 간단하지만 값이 다르게나와 문의드립니다. 

 

*테이블정보*
주문테이블( order Table )

name commssion price
사과 10 1000
사과 10 1000
토마토 4 100
사과 10 1000



저는 상품 별 총 판매금액과 판매수수료를 구하고싶어 다음과 같이 쿼리를 만들었습니다.

[1].

SELECT 
 o.name as '상품명',
 SUM(price) as '판매금액',
 SUM(price/100*commssion) as '판매수수료' 
 FROM ORDER o
 GROUP BY o.name;
[2].
SELECT 
 o.name as '상품명',
 SUM(price) as '판매금액',
 SUM(price/100*10) as '판매수수료' 
 FROM ORDER o
 GROUP BY o.name;

 

Q.1)  [1], [2]은 결과값이 근소하게 다릅니다. ( 소수점 차이로요... )
        DB에서 commssion데이터를 가져오는 값과 직접 10으로 입력하는 것의 결과값이 다릅니다.!!!! 
        ( 같은 10인데 값이 달라요!!! 0.000000002 차이가 납니다. )
       
       왜 자꾸 값이 차이가 날까 생각을 하다가 commssion의 타입에 대한 의문을 갖게 되었습니다. 
       commssion의 타입은 'float'입니다. 
       혹시, float를 사용했기때문에 소수점차이가 나는건가요? 
       어떤 통계치를 구하기위해서는 float/double 대신 'decimal'을 사용해야하나요?

 

 

감사합니다. 

 

by 마농 [2018.11.15 15:41:04]

float/double 은 자리수가 고정으로 정해져 있기 때문에 정확도가 떨어집니다.


by 쿼리냠냠 [2018.11.15 15:51:56]

마농님 답변 감사드립니다.

보통 정산을 위한 값(수수료/금액)들은 데이터 타입을 어떤걸로 사용을 하나요?

 


by 마농 [2018.11.15 15:57:48]

그냥 NUMBER 형 쓰겠지요?(오라클 기준)
다른 데서는 NUMERIC, DECIMAL 이라고 하나요?
수학이나 과학에서 엄청 큰수, 엄청 작은수를 표현할 때는 VARCHAR2 를 쓰기도 한다고 들었습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입