- Catégories :
Fonctions de fenêtre (Général)
RATIO_TO_REPORT¶
Renvoie le rapport d’une valeur au sein d’un groupe à la somme des valeurs au sein du groupe. Si expr1
correspond à null ou si la somme de expr1
dans le groupe correspond à 0, alors RATIO_TO_REPORT renvoie null.
Syntaxe¶
RATIO_TO_REPORT( <expr1> ) [ OVER ( [ PARTITION BY <expr2> ] [ ORDER BY <expr3> ] ) ]
Arguments¶
expr1
L’expression est une expression qui correspond à un type de données numérique (INTEGER, FLOAT, DECIMAL, etc.).
expr2
C’est l’expression facultative à partir de laquelle effectuer la partition.
expr3
C’est l’expression facultative à partir de laquelle effectuer le classement dans chaque partition. Notez que pour cette fonction, l’ordre dans la partition n’affecte pas la sortie.
Dans cette fonction, comme dans toutes les fonctions de fenêtre, cette commande ORDER BY ne contrôle pas l’ordre de la sortie de la requête entière.
Notes sur l’utilisation¶
RATIO_TO_REPORT est calculé comme suit :
valeur de l’argument
expr1
pour la ligne en cours / somme de l’argumentexpr1
pour la partitionLa sous-clause ORDER BY de la clause OVER est autorisée dans cette fonction pour des raisons de cohérence syntaxique avec d’autres fonctions de fenêtre, mais elle n’affecte pas le calcul. Snowflake recommande de ne pas inclure la clause ORDER BY lors de l’utilisation de cette fonction.
Exemples¶
Cet exemple simple montre le pourcentage du profit d’une chaîne de magasins généré par chaque magasin :
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 |
+----------+--------+----------------+
Cet exemple montre le pourcentage de profit dans chaque province généré par chaque magasin dans cette 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 |
+--------------+----------+--------+----------------+