꺄르륵
[Oracle SQL Developer] 기초 V - 숫자 함수 본문
1. 숫자 함수
: 숫자형 함수는 숫자 데이터를 입력받아 처리하고 숫자를 리턴하는 함수이다.
1.1. ABS(n)
: 절대값을 반환한다.
1.1.1. 사용예시
: 주로 편차를 구할때 사용된다.
SELECT ABS(-100) FROM DUAL;
1.2. ROUND(n[,i])
: ROUND는 주어진 자료를 n을 i+1번째 자리에서 반올림한다.
: i가 음수이면 정수 부분에서 (i번째 자리) 반올림한다.
: i가 생략되면 0으로 간주된다.
: 날짜에서 사용되면
SELECT ROUND(SYSDATE) FROM DUAL;
SELECT MOD((TO_DATE('19920805')-TO_DATE('00010101')-1), 7) FROM DUAL;
-- 0이면 일요일, 1이면 월요일, ... , 6이면 토요일이다.
1.3. TRUNC(n[,i])
: n값을 i+1번째 자리에서 버림을 수행한다.
: n값을 소수 i번째자리에서 잘라서 버린다.
: i가 생략되면 0으로 간주된다.
예)
SELECT TRUNC(123.34567,2), TRUNC(123.34567,-1), TRUNC(123.34567) FROM DUAL;
-- 123.34 / 120 / 123 으로 출력된다.
-- 요금계산할때 원단위는 절삭됩니다. 의 역할
1.4. 나머지 함수 (MOD, REMAINDER)
: 내부적으로 처리 형태가 다름
1.4.1. MOD : n2 - n1 * FLOOR(n2 / n1)
- FLOOR(n) : n과 같거나 작은 수 중 가장 큰수
1.4.2. REMAINDER : n2 - n1 * ROUND(n2 / n1)
: n과
예)
SELECT FLOOR(3.25), FLOOR(3), FLOOR(-3.25) FROM DUAL;
SELECT MOD(7,3), REMAINDER(7,3) FROM DUAL;
SELECT MOD(8,3), REMAINDER(8,3) FROM DUAL;
1.5 WIDTH_BUCKET(c, min, max, r)
: c의 값을 min 하한값과 max 상한값을 구해서 r 등급을 나눈다.
: min과 max값을 r 갯수로 구분하고, c값이 그 중 어느 구간에 속하는지를 반환한다.
: min과 max값은 시작값과 끝값을 나타낸다.
예) 회원테이블에서 회원번호, 회원명, 마일리지, 비고를 조회하시오.
단, 마일리지를 500 ~ 8000으로 10개의 구간을 정하고 회원이 보유한 마일리지가 속한 구간을 비고란에 출력하시오.
SELECT MEM_ID 회원번호,
MEM_NAME 회원명,
MEM_MILEAGE 마일리지,
11 - WIDTH_BUCKET(MEM_MILEAGE, 500, 9000, 10) 비고
-- 역순으로 구할때는 min, max 값을 변경해주거나 R+1 값을 수식의 앞에서 빼주면 된다.
FROM MEMBER
ORDER BY MEM_MILEAGE DESC; -- 역순으로 출력된다.
예) 사원테이블(EMPLOYEES)에서 보너스를 계산하려한다.
보너스는 본봉 * 실적(COMMISSION_PCT)로 계산하며, 소수점 1자리까지 표시한다.
지급액은 본봉 + 보너스로 표시한다.
실적이 없으면 보너스는 0이다. NULL은 함수로 처리한다. ( NVL 함수를 사용한다. )
- NVL(C,V1)
: C의 값이 NULL이라면 V1을 반환한다. NULL이 아니라면 C의 값을 반환한다.
단, Alias는 사원번호, 사원명, 급여, 보너스, 지급액
SELECT EMPLOYEE_ID 사원번호,
EMP_NAME 사원명,
SALARY 급여,
ROUND((SALARY * NVL(COMMISSION_PCT, 0)),1) 보너스, -- 함수안에 함수를 사용할 수 있다.
SALARY + ROUND((SALARY * NVL(COMMISSION_PCT, 0)),1) 지급액
FROM EMPLOYEES;
예) 회원테이블에서 현재 월이 생일인 회원에게 보너스 마일리지를 부여하려 한다.
부여할 마일리지는 회원이 보유한 마일리지의 10% 이고 정수형(반올림) 이어야한다.
단, Alias는 회원번호, 회원명, 생일, 마일리지, 추가지급마일리지 이다.
- EXTRACT (MONTH FROM 컬럼명) : 날짜 자료('컬럼명')에서 월을 숫자로 추출하는 함수
SELECT MEM_ID 회원번호,
MEM_NAME 회원명,
MEM_BIR 생일,
MEM_MILEAGE 마일리지,
ROUND(MEM_MILEAGE * 0.1) 추가지급마일리지
FROM MEMBER
WHERE (EXTRACT(MONTH FROM MEM_BIR)) = (EXTRACT(MONTH FROM SYSDATE));
-- FROM 빼먹어서 10분날림.
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; -- SYSDATE의 월 추출
SELECT EXTRACT(MONTH FROM MEM_BIR) FROM MEMBER; -- MEMBER 테이블의 MEE_BIR 컬럼의 월 추출
예) 장바구니테이블에서 2005년 5월 회원별 평균 구매수량을 조회하시오.
AVG(c) : 컬럼 C의 평균값
평균 구매 수량은 정수로출력
단, Alias는 회원번호, 평균구매수량
SELECT CART_MEMBER 회원번호,
ROUND(AVG(CART_QTY)) 평균구매수량
FROM CART
WHERE CART_NO LIKE '200505%'
GROUP BY CART_MEMBER
ORDER BY 1;
'프로그래밍 > DB' 카테고리의 다른 글
[Oracle SQL Developer] 기초 VII - 날짜 함수 (0) | 2019.10.10 |
---|---|
[Oracle SQL Developer] 기초 VI - 문자열 함수 (0) | 2019.10.08 |
[Oracle SQL Developer] Import (0) | 2019.10.07 |
[Oracle SQL Developer] 기초 IV - SELECT 문 (0) | 2019.10.07 |
[Oracle SQL Developer] 기초 III - 숫자 자료형, 날짜 타입 (0) | 2019.10.07 |