MySQL에서 숫자를 처리할 때 자주 사용되는 CEILING(), FLOOR(), ROUND() 함수는 모두 수치를 조정하지만 각각 동작 방식이 다릅니다. 이 글에서는 세 함수의 개념과 실행 예제, 그리고 핵심 차이점을 하나씩 살펴보겠습니다.
CEILING() 함수 – 무조건 올림
CEILING() 함수는 X보다 작지 않은(크거나 같은) 정수 중 가장 작은 값을 반환합니다. 즉, 소수 값과 상관없이 항상 큰 쪽 정수로 올림합니다.
mysql> Select CEILING(3.46); +---------------+ | CEILING(3.46) | +---------------+ | 4 | +---------------+ 1 row in set (0.00 sec) mysql> Select CEILING(-6.43); +----------------+ | CEILING(-6.43) | +----------------+ | -6 | +----------------+ 1 row in set (0.02 sec)
위 예제에서 3.46은 4로 올림되고, 음수인 -6.43은 0에 더 가까운 -6으로 올림되는 것을 확인할 수 있습니다.
FLOOR() 함수 – 무조건 내림
FLOOR() 함수는 X보다 크지 않은(작거나 같은) 정수 중 가장 큰 값을 반환합니다. 즉, 항상 작은 쪽 정수로 내림합니다.
mysql> Select FLOOR(-6.43); +--------------+ | FLOOR(-6.43) | +--------------+ | -7 | +--------------+ 1 row in set (0.00 sec) mysql> Select FLOOR(3.46); +-------------+ | FLOOR(3.46) | +-------------+ | 3 | +-------------+ 1 row in set (0.00 sec)
-6.43은 -7로 내림되고, 3.46은 3으로 내림됩니다. CEILING()과 정반대로 동작한다는 점이 특징입니다.
ROUND() 함수 – 반올림
ROUND() 함수는 X를 가장 가까운 정수로 반올림하여 반환합니다. 두 번째 인수 D를 지정하면 소수점 D번째 자리까지 반올림하며, D가 양수가 아니면 소수점 이하 자릿수가 모두 제거됩니다.
mysql> SELECT ROUND(5.693893); +---------------------------------------------------------+ | ROUND(5.693893) | +---------------------------------------------------------+ | 6 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT ROUND(5.693893,2); +---------------------------------------------------------+ | ROUND(5.693893,2) | +---------------------------------------------------------+ | 5.69 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
인수를 하나만 넣으면 정수로 반올림되고, 두 번째 인수로 2를 지정하면 소수점 둘째 자리까지 반올림된 결과(5.69)가 반환됩니다.
세 함수의 핵심 차이점
위의 정의와 예제를 통해 세 함수의 차이를 다음과 같이 정리할 수 있습니다.
- ROUND(): 두 번째 인수 D와 숫자 자체(D번째 소수점 이하 자릿수가 5 이상인지 여부)에 따라 올림 또는 내림이 결정됩니다.
- FLOOR(): 입력값과 관계없이 항상 내림(더 작은 정수)합니다.
- CEILING(): 입력값과 관계없이 항상 올림(더 큰 정수)합니다.
동일한 값에 대한 결과 비교
mysql> Select ROUND(1.415,2),FLOOR(1.415),CEILING(1.415); +----------------+--------------+----------------+ | ROUND(1.415,2) | FLOOR(1.415) | CEILING(1.415) | +----------------+--------------+----------------+ | 1.42 | 1 | 2 | +----------------+--------------+----------------+ 1 row in set (0.00 sec)
같은 값 1.415에 대해 ROUND()는 1.42로 반올림하고, FLOOR()는 1로 내림하며, CEILING()은 2로 올림합니다. 이처럼 세 함수의 동작 방식을 정확히 이해하고 용도에 맞게 활용하면 데이터 조회 및 계산 시 원하는 결과를 얻을 수 있습니다.