카테고리:

윈도우 함수 (일반)

RATIO_TO_REPORT

그룹 내의 값 합계에 대한 그룹 내의 값 비율을 반환합니다. expr1 이 null로 평가되거나 그룹 내 expr1 의 합계가 0으로 평가되는 경우, RATIO_TO_REPORT는 null을 반환합니다.

구문

RATIO_TO_REPORT( <expr1> ) [ OVER ( [ PARTITION BY <expr2> ] [ ORDER BY <expr3> ] ) ]
Copy

인자

expr1

이는 숫자 데이터 타입(INTEGER, FLOAT, DECIMAL 등)으로 평가되는 식입니다.

expr2

분할하는 선택적 식입니다.

expr3

각 파티션 내에서 순서를 지정하는 선택적 식입니다. 이 함수의 경우, 파티션 내의 순서는 출력에 영향을 미치지 않습니다.

이 함수에서, 모든 윈도우 함수와 마찬가지로 이 ORDER BY는 전체 쿼리 출력의 순서를 제어하지 않습니다.

사용법 노트

  • RATIO_TO_REPORT는 다음과 같이 계산됩니다.

    현재 행에 대한 expr1 인자의 값 / 파티션에 대한 expr1 인자의 합계

  • OVER() 절의 ORDER BY 하위 절은 다른 윈도우 함수와의 구문 일관성을 위해 이 함수에서 허용되지만, ORDER BY는 계산에 영향을 미치지 않습니다. Snowflake는 이 함수 사용 시 OVER 절에 ORDER BY 하위 절을 포함하지 않을 것을 권장합니다.

이 간단한 예는 각 개별 매장에서 생성된 매장 체인 이익의 백분율을 보여줍니다.

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.
    ;
Copy
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 |
+----------+--------+----------------+
Copy

이는 해당 지방의 각 매장에서 생성된 각 지방 내 이익의 백분율을 보여줍니다.

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 |
+--------------+----------+--------+----------------+
Copy