ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] 윈도우 함수(Window Funtion)_그룹 내 비율 함수
    RDS/Oracle 2019. 3. 26. 07:00
    반응형

    윈도우 함수 종류

    1.그룹 내 순위(RANK) 관련 함수

     - RANK, DENSE_RANK, ROW_NUMBER 함수

    2.그룹 내 집계(AGGREGATE) 관련 함수

     - SUM, MAX, MIN, AVG, COUNT 함수 

    3.그룹 내 행 순서 관련 함수

     - FIRST_VALUE, LAST_VALUE, LAG, LEAD 함수 

    4.그룹 내 비율 관련 함수

     - CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT 함수


    윈도우 함수 문법 

    SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ([PARTITION BY 컬럼] [ORDER BY 절] [WINDOWING 절])

      FROM 테이블명; 

      

    WINDOW_FUNCTION

     - 함수명

    ARGUMENTS (인수) 

     - 함수에 따라 0 ~ N개의 인수가 지정될 수 있습니다.

    PARTITION BY 절

     - 전체 집합을 기준에 의해 소그룹으로 나눌 수 있습니다.

    ORDER BY 절

     - 어떤 항목에 대해 순위를 지정할 지 ORDER BY 절을 기술합니다.

    WINDOWING 절

     - 함수의 대상이 되는 행 기준의 범위를 지정할 수 있습니다.


    RATIO_TO_REPORT 함수 

     RATIO_TO_REPORT 함수를 이용해 파티션 내 전체 SUM(컬럼) 값에 대한 행별 컬럼 값의 백분율을 소수점으로 구할 수 있습니다. 결과 값은 > 0  & <= 1 의 범위를 가집니다. 그리고 개별 RATIO의 합을 구하면 1이 됩니다.

    1
    2
    3
    4
    SELECT ENAME
         , SAL 
         , ROUND(RATIO_TO_REPORT(SAL) OVER(), 2) AS R_R     
      FROM EMP;
    cs


    PERCENT_RANK 함수

     PERCENT_RANK 함수를 이용해 파티션별 윈도우에서 제일 먼저 나오는 것으로 0으로, 제일 늦게 나오는 것을 1로 하여, 값이 아닌 행의 순서별 백분율을 구합니다. 결과 값은 >= 0 & <= 1 의 범위를 가집니다. 

    1
    2
    3
    4
    5
    SELECT DEPTNO 
         , ENAME
         , SAL 
         , PERCENT_RANK() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) AS P_R
      FROM EMP; 
    cs


    CUME_DIST 함수

     CUME_DIST 함수를 이용해 파티션별 윈도우의 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구합니다. 결과 값은 >= 0 & <= 1 의 범위를 가집니다. 

    1
    2
    3
    4
    5
    SELECT DEPTNO 
         , ENAME
         , SAL 
         , ROUND(CUME_DIST() OVER (PARTITION BY DEPTNO ORDER BY SAL DESC), 2) AS C_D
      FROM EMP; 
    cs

      


    NTILE 함수

     NTILE 함수를 이용해 파티션별 전체 건수를 인수 값으로 N 등분한 결과를 구할 수 있습니다.

    1
    2
    3
    4
    SELECT ENAME
         , SAL
         , NTILE(4) OVER (ORDER BY SAL DESC) AS N_T
      FROM EMP; 
    cs

     NTILE(4)의 의미는 14명의 팀원을 4개 조로 나눈다는 의미입니다. 전체 14명을 4개의 집합으로 나누면 몫이 3명, 나머지가 2명이 됩니다. 나머지 두 명은 앞의 조부터 할당됩니다. 즉, 4명 + 4명 + 3명 + 3명으로 조를 나누게 됩니다.

    반응형

    댓글

Designed by Tistory.