cume_dist

cume_dist

값 그룹 안에서 특정 값의 누적 분포(cumulative distribution), 즉 현재 행의 값보다 작거나 같은 값을 가진 행의 비율을 계산하는 윈도우 함수예요. 파티션 안에서 어떤 값이 상대적으로 어느 위치에 있는지 판단하는 데 쓸 수 있어요.

출처: 문서

본문

구문(Syntax)

cume_dist ()
  OVER ([[PARTITION BY grouping_column] [ORDER BY sorting_column]
        [RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING]] | [window_name])
FROM table_name
WINDOW window_name as ([PARTITION BY grouping_column] [ORDER BY sorting_column] RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)

기본이면서 필수인 윈도우 프레임 정의는 RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING이에요. 윈도우 함수 구문에 대한 자세한 내용은 윈도우 함수 - 구문을 참고하세요.

반환 값(Returned value)

  • 현재 행의 상대 순위(relative rank). 반환 타입은 [0, 1] 범위의 Float64예요. Float64.

예시(Example)

아래 예시는 팀 내 연봉의 누적 분포를 계산합니다:

쿼리(Query)

CREATE TABLE salaries
(
    `team` String,
    `player` String,
    `salary` UInt32,
    `position` String
)
Engine = Memory;

INSERT INTO salaries FORMAT Values
    ('Port Elizabeth Barbarians', 'Gary Chen', 195000, 'F'),
    ('New Coreystad Archdukes', 'Charles Juarez', 190000, 'F'),
    ('Port Elizabeth Barbarians', 'Michael Stanley', 150000, 'D'),
    ('New Coreystad Archdukes', 'Scott Harrison', 150000, 'D'),
    ('Port Elizabeth Barbarians', 'Robert George', 195000, 'M'),
    ('South Hampton Seagulls', 'Douglas Benson', 150000, 'M'),
    ('South Hampton Seagulls', 'James Henderson', 140000, 'M');

쿼리(Query)

SELECT player, salary,
       cume_dist() OVER (ORDER BY salary DESC) AS cume_dist
FROM salaries;

응답(Response)

   ┌─player──────────┬─salary─┬───────────cume_dist─┐
1. │ Robert George   │ 195000 │  0.2857142857142857 │
2. │ Gary Chen       │ 195000 │  0.2857142857142857 │
3. │ Charles Juarez  │ 190000 │ 0.42857142857142855 │
4. │ Douglas Benson  │ 150000 │  0.8571428571428571 │
5. │ Michael Stanley │ 150000 │  0.8571428571428571 │
6. │ Scott Harrison  │ 150000 │  0.8571428571428571 │
7. │ James Henderson │ 140000 │                   1 │
   └─────────────────┴────────┴─────────────────────┘

구현 세부 사항(Implementation Details)

cume_dist() 함수는 다음 공식으로 상대 위치를 계산해요:

cume_dist = (number of rows ≤ current row value) / (total number of rows in partition)

같은 값을 가진 행(peers)은 동일한 누적 분포 값을 받는데, 이 값은 해당 동률 그룹의 가장 높은 위치에 해당합니다.

더 알아보기 (Learn more)