📊 [SQL 프로젝트] 제13장 숫자 함수(Numeric Functions) - 숫자를 계산하고 원하는 형태로 바꾸기
제13장 숫자 함수(Numeric Functions) - 숫자를 계산하고 원하는 형태로 바꾸기
오늘의 질문
상품 가격을 확인하던 중 팀장님이 말했습니다.
"가격이 18.756달러라고 나오는데, 소수 둘째 자리까지만 표시해 주세요."
잠시 후 회계팀에서 또 요청이 들어왔습니다.
"가격을 모두 반올림해서 보고서를 만들어 주세요."
데이터는 이미 저장되어 있습니다.
하지만 숫자를 계산하거나 보기 좋게 표현해야 하는 경우가 많습니다.
이처럼 숫자를 계산하거나 변환하는 기능을 숫자 함수(Numeric Functions)라고 합니다.
학습 목표
이번 장을 학습하면 다음 내용을 할 수 있습니다.
- 숫자 함수의 역할을 설명할 수 있다.
- ROUND()로 반올림할 수 있다.
- CEILING()과 FLOOR()의 차이를 이해할 수 있다.
- ABS()로 절댓값을 구할 수 있다.
- MOD()로 나머지를 구할 수 있다.
- 실제 업무에서 숫자 함수를 활용할 수 있다.
13-1. 숫자 함수란 무엇일까요?
생각해 봅시다.
문자열 함수는
글자를 원하는 형태로 바꾸었습니다.
숫자 함수는
숫자를 계산하거나 변환합니다.
예를 들어
18.756
을
18.76
으로 반올림하거나,
19
로 올림할 수 있습니다.
🤔 왜 숫자 함수가 필요할까요?
실무에서는
저장된 숫자를 그대로 사용하는 경우보다
계산하여 출력하는 경우가 훨씬 많습니다.
예를 들면
- 반올림하기
- 올림하기
- 버림하기
- 절댓값 구하기
- 나머지 계산하기
등입니다.
13-2. ROUND() - 반올림하기
다음 SQL을 실행해 보세요.
SELECT ProductName,
Price,
ROUND(Price, 1)
FROM Products;
실행 결과(예)
| ProductName | Price | ROUND(Price,1) |
| Chai | 18.0000 | 18.0 |
| Chang | 19.0000 | 19.0 |
| Chef Anton's Gumbo Mix | 21.3500 | 21.4 |
ROUND()는
지정한 자리에서 반올림합니다.
13-3. CEILING() - 올림하기
SELECT Price,
CEILING(Price)
FROM Products;
결과
| Price | CEILING(Price) |
| 21.35 | 22 |
| 18.00 | 18 |
항상 큰 정수 방향으로 올림합니다.
13-4. FLOOR() - 버림하기
SELECT Price,
FLOOR(Price)
FROM Products;
결과
| Price | FLOOR(Price) |
| 21.35 | 21 |
| 18.90 | 18 |
소수 부분을 버립니다.
13-5. ABS() - 절댓값 구하기
SELECT ABS(-35);
결과
35
음수도 양수로 바꾸어 계산합니다.
실무에서는 두 값의 차이를 비교할 때 자주 사용합니다.
13-6. MOD() - 나머지 구하기
SELECT MOD(10, 3);
결과
1
10을 3으로 나누면
나머지는 1입니다.
🤔 ROUND(), CEILING(), FLOOR()는 어떻게 다를까요?
같은 숫자
18.6
에 대해
함수결과
| ROUND() | 19 |
| CEILING() | 19 |
| FLOOR() | 18 |
하지만
18.2
라면
함수결과
| ROUND() | 18 |
| CEILING() | 19 |
| FLOOR() | 18 |
반올림과 올림은 서로 다르다는 것을 알 수 있습니다.
💡 잠깐! 이것도 알아두세요
ROUND()는
반올림할 자릿수를 지정할 수 있습니다.
ROUND(Price, 2)
↓
소수 둘째 자리까지 표시
ROUND(Price, 0)
↓
정수로 반올림
자주 하는 실수
① ROUND()가 항상 올림이라고 생각한다.
ROUND()는
반올림입니다.
② CEILING()과 FLOOR()를 반대로 기억한다.
CEILING()
↓
천장(위)
FLOOR()
↓
바닥(아래)
라고 기억하면 쉽습니다.
③ 함수 뒤 괄호를 생략한다.
잘못된 예
ROUND Price
올바른 예
ROUND(Price)
④ MOD()를 나눗셈 결과라고 생각한다.
MOD()는
몫이 아니라
나머지를 반환합니다.
실무에서는 어떻게 사용할까요?
회사에서는 숫자 함수를 이용하여
- 상품 가격 반올림
- 배송비 계산
- 할인 금액 계산
- 평균 점수 표시
- 짝수·홀수 판별
등을 자주 수행합니다.
특히 보고서를 만들 때 매우 많이 사용됩니다.
실습
실습 1
상품 가격을 소수 첫째 자리까지 반올림하세요.
SELECT ProductName,
ROUND(Price, 1)
FROM Products;
실습 2
상품 가격을 올림하여 출력하세요.
SELECT ProductName,
CEILING(Price)
FROM Products;
실습 3
상품 가격을 버림하여 출력하세요.
SELECT ProductName,
FLOOR(Price)
FROM Products;
실무 미션
당신은 회계팀 직원입니다.
가격표를 만들기 위해
상품 가격을
정수로 반올림한 가격
도 함께 출력하려고 합니다.
다음 조건을 만족하는 SQL을 작성해 보세요.
- ProductName
- Price
- ROUND(Price,0)
핵심 정리
✔ 숫자 함수는 숫자를 계산하거나 변환한다.
✔ ROUND()는 반올림한다.
✔ CEILING()은 올림한다.
✔ FLOOR()는 버림한다.
✔ ABS()는 절댓값을 구한다.
✔ MOD()는 나머지를 계산한다.
"함수 이름은 왜 이렇게 지어졌을까?"
| 함수 | 이름의 의미 | 기억하는 방법 |
| ROUND() | 둥글게 만든다(Round) | 반올림 |
| CEILING() | 천장 | 위로 올림 |
| FLOOR() | 바닥 | 아래로 버림 |
| ABS() | Absolute(절대) | 절댓값 |
| MOD() | Modulo | 나머지 |
연습 문제
기본 문제
- 숫자 함수는 어떤 역할을 하나요?
- ROUND()와 CEILING()의 차이를 설명해 보세요.
- MOD(15,4)의 결과를 예상해 보세요.
응용 문제
- Products 테이블에서 가격을 정수로 반올림하여 출력하는 SQL을 작성해 보세요.
- Products 테이블에서 가격을 버림하여 출력하는 SQL을 작성해 보세요.
- ABS(-150)의 결과를 예측해 보세요.
도전 문제
상품 가격을
- 원래 가격
- 버림 가격
- 반올림 가격
- 올림 가격
네 개의 열로 함께 출력하는 SQL을 작성해 보세요.
다음 장 예고
이번 장에서는 숫자 함수를 이용하여 숫자를 계산하고 가공하는 방법을 배웠습니다.
하지만 업무에서는 날짜와 시간을 다루는 경우도 매우 많습니다.
예를 들어 팀장님이 이렇게 요청할 수 있습니다.
"주문한 연도만 출력해 주세요."
"주문한 월별로 보고서를 만들고 싶습니다."
"오늘 날짜를 확인해 주세요."
이처럼 날짜와 시간을 자유롭게 다루는 기능이 바로 날짜 함수(Date Functions)입니다.
다음 장에서는 다양한 날짜 함수를 이용하여 연도, 월, 일을 추출하고 현재 날짜를 활용하는 방법을 배우겠습니다.