숫자 함수
반올림(ROUND), 버림(TRUNC), 나머지(MOD) 숫자 함수의 사용법과 실습의 활용 예(별표 막대, 홀수 판별, 그룹 나누기)
#핵심 요약
ROUND(값, 자리)는 반올림, TRUNC(값, 자리)는 버림, MOD(값, 나눌 수)는 나눈 나머지를 돌려줌
자리가 1이면 소수점 첫째 자리까지 남기고, -2면 십의 자리에서 반올림해 백 단위로 맞춤
PostgreSQL은 MOD 대신 % 연산자를 쓸 수 있음
#개념과 동작 원리
| 함수 | 예 | 설명 |
|---|---|---|
ROUND(876.567, 1) |
소수점 첫째 자리까지 반올림 | |
ROUND(sal, -2) |
십의 자리에서 반올림 | |
TRUNC(876.567, 1) |
소수점 첫째 자리는 두고 그 뒤는 버림 | |
TRUNC(3/2) |
실습의 힌트 문장 몫의 정수 부분 |
|
MOD(11, 2) |
11을 2로 나눈 나머지 |
#주요 용어와 구성 요소
| 구문 | 의미 |
|---|---|
| 자리 인수 | 양수는 소수부, 0은 정수부, 음수는 소수점 왼쪽 자리를 기준으로 처리함 |
| 나머지 | 정수의 나눗셈 몫과 나머지를 구분하며 음수 입력의 부호 규칙을 확인해야 함 |
#필수 명령어 또는 SQL
| 항목 | 실행 조건 |
|---|---|
| 작업 대상 | dual의 숫자 표현식, emp.sal, empno, emp19.age |
| 필요 권한 | 대상 테이블 조회 권한이 있는 계정 |
| 바꿀 입력값 | 숫자 값, 자리 수, 제수와 대상 테이블, 열 |
| 결과 해석 | 반올림, 절삭, 나머지 계산 결과 |
SELECT 876.567, ROUND(876.567, 1), TRUNC(876.567, 1)
FROM dual;
SELECT ename, sal, ROUND(sal, -2)
FROM emp;결과 해석:
월급 100을 별 하나로 그리기:
SELECT ename, ROUND(sal, -2), ROUND(sal, -2) / 100,
LPAD(' ', ROUND(sal, -2) / 100, '*')
FROM emp;결과 해석:
실습에서는 이 결과에서 "별이 하나 모자란다"고 적었음LPAD는 결과 전체 길이를 두 번째 인수로 맞추므로, 공백 한 글자가 그 길이에 포함되어 별이 하나 적게 나옴
수업 자료에 고친 답은 없음LPAD는 문자 함수에 있음
나머지로 홀수 판별, 그룹 나누기:
SELECT MOD(11, 2) FROM dual;
SELECT ename, age
FROM emp19
WHERE MOD(age, 2) = 1
ORDER BY age DESC;
SELECT empno, ename, sal
FROM emp
WHERE MOD(empno, 3) = 0;SELECT ename, age
FROM emp19
WHERE age % 2 = 1
ORDER BY age DESC;결과 해석: MOD(empno, 3) = 0은 연습 문제의 "야간 급여 정산 배치를 사번 기준 세 그룹으로 나눌 때 0번 그룹"임
0, 1, 2로 세 그룹을 나눌 수 있음
#구문과 옵션 설명
| 구문 | 의미 |
|---|---|
| ROUND(n) / TRUNC(n) | 자리 인수를 생략하면 0자리 기준임 |
| ROUND와 숫자 타입 | NUMBER와 부동소수점 표현은 내부 표현 차이로 반올림 자릿값이 달라질 수 있음 |
| MOD(n2,n1) | n1이 0이면 n2를 반환하며 음수 입력에서는 수학적 양의 나머지와 다를 수 있음 |
| PostgreSQL % | smallint, integer, bigint, numeric에 제공됨 |
#사용 조건과 주의사항
나이를 MOD(age, 2) = 1로 분류하는 예는 음수가 아닌 정수 나이를 전제로 함
사번을 세 그룹으로 나누는 설명도 사번의 부호와 정수 조건을 확인해야 함