MySQL에서 정수형 컬럼끼리 나눌 때 소수점 이하까지 정밀한 결과를 얻으려면 CAST() 함수를 활용하는 것이 좋습니다. 값 하나를 DECIMAL 타입으로 캐스팅한 후 나누기를 수행하면 훨씬 정확한 계산 결과를 얻을 수 있습니다. 아래 예제와 함께 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable1352 -> ( -> Value1 int, -> Value2 int -> ); Query OK, 0 rows affected (0.54 sec)
2. 데이터 삽입하기
insert 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1352 values(10,30); Query OK, 1 row affected (0.42 sec) mysql> insert into DemoTable1352 values(40,60); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable1352 values(110,130); Query OK, 1 row affected (0.18 sec)
3. 데이터 조회하기
select 문을 사용하여 테이블의 전체 레코드를 확인합니다.
mysql> select * from DemoTable1352;
실행 결과는 다음과 같습니다.
+--------+--------+ | Value1 | Value2 | +--------+--------+ | 10 | 30 | | 40 | 60 | | 110 | 130 | +--------+--------+ 3 rows in set (0.00 sec)
4. CAST()를 적용한 나누기 쿼리
이제 Value1을 DECIMAL(18,14) 타입으로 캐스팅한 후 Value2로 나누는 쿼리입니다.
mysql> select cast(Value1 as DECIMAL(18,14)) / Value2 from DemoTable1352;
소수점 이하까지 매우 정밀한 나누기 결과가 출력됩니다.
+-----------------------------------------+ | cast(Value1 as DECIMAL(18,14)) / Value2 | +-----------------------------------------+ | 0.333333333333333333 | | 0.666666666666666666 | | 0.846153846153846153 | +-----------------------------------------+ 3 rows in set (0.00 sec)
참고: CAST() 없이 정수끼리 단순히 나누면 MySQL은 기본적으로 제한된 소수점 자릿수만 표시합니다. DECIMAL(18,14)처럼 소수점 자릿수를 넉넉하게 지정하면 10/30 = 0.333333...처럼 반복되는 소수도 원하는 정밀도 그대로 확인할 수 있습니다.