DB/SQL 기초

WINDOW 함수 - CUME_DIST, NTILE, RATIO_TO_REPORT, PERCENT_RANK (*비율 함수 정리)

케이(kay) 2022. 8. 16. 17:35
반응형
SMALL

주요개념

→ 모든 윈도우 함수의 ‘전제조건은 윈도우 함수 내에서’ 이다.

 

함수형태 비교

→ CUME_DIST()

→ NTILE(숫자)

→ RATIO_TO_REPORT(컬럼명)

→ PERCENT_RANK()

 

 

CUME_DIST 함수

CUMULATIVE는 누적이라는 뜻이다.

CUME_DIST 함수는 현재행보다 같거나 작은 건수들에 대하여 ‘누적 백분율’을 구한다.

SELECT TEAM, ENAME, GOAL,
       ROUND(CUME_DIST() OVER (PARTITION BY TEAM ORDER BY GOAL),2) AS CD 
 FROM TABLE1;
TEAM    ENAME        GOAL        CD
------- --------- ------- ---------
A       SON            30      0.33
A       KAKA           30      0.67
A       MESSY          25         1
B       NEYMAR         25       0.5
B       HOLLAN         12         1

→ GOAL이 동점일 경우 CUME_DIST 비율값도 동점에 대해 누적된 값으로 나타난다.

→ PERCENT_RANK 함수는 0부터 시작하는 반면,

→ CUME_DIST 함수는 값이 항상 0 보다 크다.

 

 

NTILE 함수

TILE은 사각형의 타일을 의미한다.

전체행을 타일처럼 ‘N개로 배분’ 한다는 뜻이다.

SELECT TEAM, ENAME, GOAL,
       NTILE(4) OVER (ORDER BY GOAL DESC) AS TILE 
 FROM TABLE1;
TEAM    ENAME          GOAL    TILE
------- ---------- -------- -------
A       SON              30       1
A       KAKA             30       1
A       MESSY            25       2
B       NEYMAR           25       3
B       HOLLAND          12       4

→ NTILE(4) 이므로 전체 테이블을 4등분한다.

→ 전체테이블5 / 타일4 = 1.2

→ 4그룹 1행씩 나머지 2는 앞그룹에 순서대로

 

RATIO_TO_REORT 함수

RATIO는 비율을 뜻한다.

’해당값 / 전체값(sum)의 비율’을 나타낸다.

SELECT TEAM, ENAME, GOAL,
       ROUND(RATIO_TO_REPORT(GOAL) OVER (PARTITION BY TEAM), 2) AS RATIO 
  FROM TABLE1;
TEAM    ENAME        GOAL     RATIO
------- --------- ------- ---------
A       SON            28      0.70  -- 28/40
A       KAKA           25      0.66
A       MESSY          15      0.36
B       NEYMAR         15      0.60  -- 15/25   
B       HOLLAND        10      0.40

 

PERCENT_RANK 함수

PERCENT는 백분율이다.

파티션별 각 행의 순서에 따라 ‘0~1 까지 백분율’을 구한다.

SELECT TEAM, ENAME, GOAL,
       PERCENT_RANK() OVER (PARTITION BY TEAM ORDER BY GOAL) AS PR 
  FROM TABLE1;
TEAM    ENAME        GOAL        PR
------- --------- ------- ---------
A       SON            28         0
A       KAKA           25       0.5
A       MESSY          15         1
B       NEYMAR         15         0 
B       HOLLAND        10         1
C       JIDAN           8         0
C       PELE            8         0
C       PARK            6       0.5   -- 잘 이해가 ..
C       KI              3      0.75   
C       HWANG           0         1
반응형
LIST