- カテゴリ:
ウィンドウ関数 (一般)
RATIO_TO_REPORT¶
グループ内の値の合計に対する、グループ内の値の比率を返します。 expr1
がnullと評価されるか、グループ内の expr1
の合計が0と評価される場合、 RATIO_TO_REPORT はnullを返します。
構文¶
RATIO_TO_REPORT( <expr1> ) [ OVER ( [ PARTITION BY <expr2> ] [ ORDER BY <expr3> ] ) ]
引数¶
expr1
これは、数値データ型(INTEGER、 FLOAT、 DECIMALなど)に評価される式です。
expr2
これは、パーティションを分割するオプションの式です。
expr3
これは、各パーティション内で並べ替えるオプションの式です。この関数では、パーティション内の順序は出力に影響しないことに注意してください。
この関数では、すべてのウィンドウ関数と同様に、この ORDER BY はクエリ出力全体の順序を制御しません。
使用上の注意¶
RATIO_TO_REPORT は、次のように計算されます。
現在の行の
expr1
引数の値/パーティションのexpr1
引数の合計他のウィンドウ関数との構文の一貫性を保つために、この関数では OVER 句内で ORDER BY 句を使用できますが、計算に影響しません。この関数を使用する場合、 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 |
+--------------+----------+--------+----------------+