RATIO_TO_REPORT

RATIO_TO_REPORT

RATIO_TO_REPORT 함수는 그룹 안의 값이 그룹 안 값들의 합에서 차지하는 비율을 반환해요. expr1이 null로 평가되거나 그룹 안의 expr1 합이 0으로 평가되면 RATIO_TO_REPORT는 null을 반환해요.

출처: 문서

본문

문법 (Syntax)

RATIO_TO_REPORT( <expr1> ) [ OVER ( [ PARTITION BY <expr2> ]
  [ ORDER BY <expr3> ] [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] ) ]

인자 (Arguments)

  • expr1 — 숫자 데이터 타입(INTEGER, FLOAT, DECIMAL 등)으로 평가되는 표현식이에요.
  • expr2 — 파티션으로 나눌 때 사용하는 선택적 표현식이에요.
  • expr3 — 각 파티션 안에서 정렬할 때 사용하는 선택적 표현식이에요. 이 함수에서 파티션 안의 순서는 출력에 영향을 주지 않아요. 모든 윈도우 함수와 마찬가지로 이 함수에서 ORDER BY는 전체 쿼리 출력의 순서를 제어하지 않아요.

사용 메모 (Usage notes)

  • RATIO_TO_REPORT는 다음과 같이 계산돼요: 현재 행의 expr1 인자 값 / 파티션의 expr1 인자 합
  • OVER 절 안의 ORDER BY 절은 다른 윈도우 함수와의 구문 일관성을 위해 이 함수에서 허용되지만 계산에는 영향을 주지 않아요. Snowflake는 이 함수를 사용할 때 ORDER BY 절을 포함하지 않는 것을 권장해요.

예제 (Examples)

이 간단한 예제는 매장 체인 이익 중 각 개별 매장이 기여한 비율을 보여줘요:

CREATE TABLE store_profit (
  store_id INTEGER,
  province VARCHAR,
  profit NUMERIC(11, 2));

INSERT INTO store_profit (store_id, province, profit) VALUES
  (1, 'Ontario', 300),
  (2, 'Saskatchewan', 250),
  (3, 'Ontario', 450),
  (4, 'Ontario', NULL)  -- hasn't opened yet, so no profit yet.
  ;
SELECT store_id, profit,
    100 * RATIO_TO_REPORT(profit) OVER () AS percent_profit
  FROM store_profit
  ORDER BY store_id;
+----------+--------+----------------+
| STORE_ID | PROFIT | PERCENT_PROFIT |
|----------+--------+----------------|
|        1 | 300.00 |    30.00000000 |
|        2 | 250.00 |    25.00000000 |
|        3 | 450.00 |    45.00000000 |
|        4 |   NULL |           NULL |
+----------+--------+----------------+

이 예제는 각 지방(province) 내 이익 중 해당 지방의 각 매장이 기여한 비율을 보여줘요:

SELECT province, store_id, profit,
    100 * RATIO_TO_REPORT(profit) OVER (PARTITION BY province) AS percent_profit
  FROM store_profit
  ORDER BY province, store_id;
+--------------+----------+--------+----------------+
| PROVINCE     | STORE_ID | PROFIT | PERCENT_PROFIT |
|--------------+----------+--------+----------------|
| Ontario      |        1 | 300.00 |    40.00000000 |
| Ontario      |        3 | 450.00 |    60.00000000 |
| Ontario      |        4 |   NULL |           NULL |
| Saskatchewan |        2 | 250.00 |   100.00000000 |
+--------------+----------+--------+----------------+

더 알아보기 (Learn more)