programing

MySQL AVG 함수가 예상보다 많은 십진수를 제공함

itsource 2023. 1. 17. 21:27
반응형

MySQL AVG 함수가 예상보다 많은 십진수를 제공함

MySQL DB 버전: 10.1.37-MariaDB, innodb_version: 5.6.41-84.1에 저장된 데이터가 있습니다.쿼리를 실행하여 AVG를 사용하여 열의 평균을 구합니다. 3개의 행이 반환되고 평균값은 18.06, 18.44, 20.05입니다.문제는 왜 AVG가 18.8499999999998을 반환하는가 하는 것입니다.열 데이터 유형이 이중입니다.

select avg(col_0) from table where col_1='xxx' and col_2='yyy';

더블은 정확한 타입이 아니라 플로트의 보다 정확한 버전입니다.정확한 정밀도를 원하는 경우 정확한 숫자 열 유형을 사용해야 합니다.MySQL 문서:

DECIMAL 및 NUMERIC 유형은 정확한 숫자 데이터 값을 저장합니다.이러한 유형은 통화 데이터와 같이 정확한 정밀도를 유지하는 것이 중요한 경우에 사용됩니다.MySQL에서는 NUMERIC은 DIMAL로 구현되어 있기 때문에 DIMACTIAL에 대한 다음 코멘트가 NUMERIC에 동일하게 적용됩니다.

프레젠테이션 측에서는 반올림을 통해 이 문제를 해결할 수 있지만, 보다 장기적인 솔루션에는 정확한 숫자 유형을 사용하십시오.

round()를 사용할 수 있습니다.

select ROUND(avg(col_0),2) from table where col_1='xxx' and col_2='yyy';

소수점 2개 줄 거예요

CAST()를 사용할 수도 있습니다.

select CAST(avg(col_0),2) AS DECIMAL (10,2)) from table where col_1='xxx' and col_2='yyy';

FORMAT을 사용할 수 있습니다.

select FORMAT(avg(col_0),2) from table where col_1='xxx' and col_2='yyy';

언급URL : https://stackoverflow.com/questions/55020395/mysql-avg-function-gives-more-decimal-than-expected

반응형