본문 바로가기
MySQL 에러 처리법

계산식의 결과값이 엉뚱하게 나오는 경우

by 모모레 2019. 3. 13.

MySQL에서 특정 숫자 데이터에 대한 계산을 통해 결과값을 도출하는 경우에 해당 결과값이 엉뚱한 값이 나오는 경우가 있다. 

필자의 동료도 숫자 데이터를 단순히 나눠서 더하는 작업을 진행했는데 전혀 엉뚱한 값이 도출되어 해당 문제를 문의 하였다. 


이런 경우는 MySQL의 특별한 결과값 Return 데이터 타입에 의해 발생하는 것으로 보인다. 


레퍼런스를 뒤져 보면 다음과 같은 구문이 있는 것을 확인할 수 있다 


For numeric arguments, the variance and standard deviation functions return a DOUBLE value. The SUM() and AVG()functions return a DECIMAL value for exact-value arguments (integer or DECIMAL), and a DOUBLE value for approximate-value arguments (FLOAT or DOUBLE).


이 구문은 다음의 레퍼런스에 나와있는 글이다. 

https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html


읽어보면 숫자 인자의 경우 수식 관련 작업을 하는 경우 해당 값이 Double로 전달되어지고, SUM이나 AVG 경우에는 인자의 타입에 따라 DECIMAL 또는 DOUBLE의 형태로 전달 된다는 내용임을 알 수 있다. 


만약, 단위가 많이 차이나는 값이나, ( 양수와 음수의 더하기) 또는 소수점이 있는 경우에는 Double이나 Float 타입의 경우 fault가 발생하여 요상한 값이 발생할 수 있다. 그런 위험성이 있다고 판단되는 경우에는 형변환을 통해 Decimal이나 INT형으로 변환하여 처리하면 된다.