カテゴリ:

ウィンドウ関数 (一般)

RATIO_TO_REPORT

グループ内の値の合計に対する、グループ内の値の比率を返します。 式1 がnullと評価されるか、グループ内の 式1 の合計が0と評価される場合、 RATIO_TO_REPORT はnullを返します。

構文

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

引数

式1

これは、数値データ型(INTEGER、 FLOAT、 DECIMALなど)に評価される式です。

式2

これは、パーティションを分割するオプションの式です。

式3

これは、各パーティション内で並べ替えるオプションの式です。この関数では、パーティション内の順序は出力に影響しないことに注意してください。

この関数では、すべてのウィンドウ関数と同様に、この ORDER BY はクエリ出力全体の順序を制御しません。

使用上の注意

  • RATIO_TO_REPORT は、次のように計算されます。

    現在の行の 式1 引数の値/パーティションの 式1 引数の合計

  • この関数では、他のウィンドウ関数との構文の一貫性を保つために、 OVER()句の ORDER BY サブ句を使用できますが、 ORDER BY は計算に影響しません。この関数を使用するときは、 OVER 句に ORDER BY サブ句を含めないことをSnowflakeはお勧めします。

この簡単な例は、個々の店舗ごとに生成された店舗チェーンの利益の割合を示しています。

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

これは、その州の各店舗によって生成された各州内の利益の割合を示しています。

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