- Categorias:
Funções de agregação (Geral) , Funções de janela (Geral, Quadro de janela)
AVG¶
Retorna a média dos registros que não são NULL. Se todos os registros dentro de um grupo forem NULL, a função retorna NULL.
Sintaxe¶
Função de agregação
AVG( [ DISTINCT ] <expr1> )
Função de janela
AVG( [ DISTINCT ] <expr1> ) OVER (
[ PARTITION BY <expr2> ]
[ ORDER BY <expr3> [ ASC | DESC ] [ <window_frame> ] ]
)
Para obter mais detalhes sobre a sintaxe window_frame
, consulte Sintaxe e utilização do quadro de janela.
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.
Notas de uso¶
Ao passar uma expressão VARCHAR, esta função converte implicitamente a entrada em valores de ponto flutuante. Se a conversão não puder ser executada, um erro é devolvido.
Quando esta função é chamada como uma função de janela (ou seja, com uma cláusula OVER):
Se a cláusula OVER contiver uma subcláusula ORDER BY, então:
O quadro de janela é exigido. Se nenhum quadro de janela for especificado explicitamente, então o ORDER BY implicará um quadro de janela cumulativo:
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
Para obter mais informações sobre quadros de janelas, incluindo sintaxe e exemplos, consulte Sintaxe e utilização do quadro de janela.
Para obter mais informações sobre quadros de janelas implícitos, consulte também Notas de uso dos quadros de janela.
O uso da palavra-chave DISTINCT dentro da função de janela é proibido e resulta em um erro de tempo de compilação.
Exemplos¶
Configuração:
CREATE OR REPLACE TABLE avg_example(int_col int, d decimal(10,5), s1 varchar(10), s2 varchar(10)); INSERT INTO avg_example VALUES (1, 1.1, '1.1','one'), (1, 10, '10','ten'), (2, 2.4, '2.4','two'), (2, NULL, NULL, 'NULL'), (3, NULL, NULL, 'NULL'), (NULL, 9.9, '9.9','nine');
Exibir os dados:
SELECT * FROM avg_example ORDER BY int_col, d; +---------+----------+------+------+ | INT_COL | D | S1 | S2 | |---------+----------+------+------| | 1 | 1.10000 | 1.1 | one | | 1 | 10.00000 | 10 | ten | | 2 | 2.40000 | 2.4 | two | | 2 | NULL | NULL | NULL | | 3 | NULL | NULL | NULL | | NULL | 9.90000 | 9.9 | nine | +---------+----------+------+------+
Calcular a média das colunas que são numéricas ou que podem ser convertidas em números:
SELECT AVG(int_col), AVG(d) FROM avg_example; +--------------+---------------+ | AVG(INT_COL) | AVG(D) | |--------------+---------------| | 1.800000 | 5.85000000000 | +--------------+---------------+
Combinar AVG
com GROUP BY
para calcular as médias dos diferentes grupos:
SELECT int_col, AVG(d), AVG(s1) FROM avg_example GROUP BY int_col ORDER BY int_col; +---------+---------------+---------+ | INT_COL | AVG(D) | AVG(S1) | |---------+---------------+---------| | 1 | 5.55000000000 | 5.55 | | 2 | 2.40000000000 | 2.4 | | 3 | NULL | NULL | | NULL | 9.90000000000 | 9.9 | +---------+---------------+---------+
Usar como uma função de janela simples:
SELECT int_col, AVG(int_col) OVER(PARTITION BY int_col) FROM avg_example ORDER BY int_col; +---------+-----------------------------------------+ | INT_COL | AVG(INT_COL) OVER(PARTITION BY INT_COL) | |---------+-----------------------------------------| | 1 | 1.000 | | 1 | 1.000 | | 2 | 2.000 | | 2 | 2.000 | | 3 | 3.000 | | NULL | NULL | +---------+-----------------------------------------+