- Categorias:
Funções de janela (General)
RATIO_TO_REPORT¶
Retorna a razão de um valor dentro de um grupo em relação à soma dos valores dentro do grupo. Se expr1
é avaliado como nulo ou a soma de expr1
dentro do grupo é avaliado como 0, então RATIO_TO_REPORT retorna nulo.
Sintaxe¶
RATIO_TO_REPORT( <expr1> ) [ OVER ( [ PARTITION BY <expr2> ] [ ORDER BY <expr3> ] ) ]
Argumentos¶
expr1
Esta é uma expressão que é avaliada como um tipo de dados numérico (INTEGER, FLOAT, DECIMAL etc.).
expr2
Esta é a expressão opcional para divisão.
expr3
Esta é a expressão opcional a ordenar dentro de cada partição. Note que, para esta função, a ordem dentro da partição não afeta a saída.
Nesta função, como em todas as funções de janela, este ORDER BY não controla a ordem de toda a saída da consulta.
Notas de uso¶
RATIO_TO_REPORT é calculado como:
valor do argumento
expr1
para a linha atual / soma do argumentoexpr1
para a partiçãoA cláusula ORDER BY dentro da cláusula OVER é permitida nesta função para consistência sintática com outras funções de janela, mas não afeta o cálculo. A Snowflake recomenda não incluir a cláusula ORDER BY ao usar esta função.
Exemplos¶
Este simples exemplo mostra a porcentagem do lucro de uma cadeia de lojas que foi gerado por cada loja individual:
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 |
+----------+--------+----------------+
Este exemplo mostra a porcentagem de lucro dentro de cada província gerada por cada loja naquela província:
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 |
+--------------+----------+--------+----------------+