Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

꺄르륵

[Oracle SQL Developer] 기초 V - 숫자 함수 본문

프로그래밍/DB

[Oracle SQL Developer] 기초 V - 숫자 함수

Teddy. 2019. 10. 8. 11:29

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;