AVG (Transact-SQL)
Retorna a média dos valores em um grupo. Valores nulos são ignorados. Pode ser seguido pela cláusula OVER.
Sintaxe
AVG ( [ ALL | DISTINCT ] expression )
Argumentos
ALL
Aplica a função de agregação a todos os valores. ALL é o padrão.DISTINCT
Especifica que AVG será executado apenas uma vez em cada instância exclusiva de um valor, por mais que esse valor ocorra.expression
É uma expressão da categoria de tipo de dados numéricos exatos ou aproximados, com exceção do tipo de dados bit. Funções de agregação e subconsultas não são permitidas.
Tipos de retorno
O tipo de retorno é determinado pelo tipo do resultado avaliado de expression.
Resultado da expressão |
Tipo de retorno |
---|---|
tinyint |
int |
smallint |
int |
int |
int |
bigint |
bigint |
Categoria decimal (p, s) |
decimal(38, s) divididos por decimal(10, 0) |
Categoria money e smallmoney |
money |
Categoria float e real |
float |
Comentários
Se o tipo de dados de expression for um tipo de dados de alias, o tipo de retorno também será do tipo de dados de alias. Entretanto, se o tipo de dados base do tipo de dados de alias for promovido, por exemplo, de tinyint para int, o valor de retorno será o do tipo de dados promovido, e não de alias.
AVG () computa a média de um conjunto de valores, dividindo a soma desses valores pela contagem de valores não nulos. Se a soma exceder o valor máximo para o tipo de dados de valor de retorno, será retornado um erro.
Exemplos
A. Usando as funções SUM e AVG para cálculos
O exemplo a seguir calcula a média de horas de férias e a soma das horas de licença médica que os vice-presidentes da Adventure Works Cycles usaram. Cada uma dessas funções de agregação produz um único valor de resumo para todas as linhas recuperadas.
USE AdventureWorks;
GO
SELECT AVG(VacationHours)as 'Average vacation hours',
SUM (SickLeaveHours) as 'Total sick leave hours'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%';
Conjunto de resultados.
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
B. Usando as funções SUM e AVG com uma cláusula GROUP BY
Quando usada com uma cláusula GROUP BY, cada função de agregação produz um único valor para cada grupo, e não para a tabela inteira. O exemplo a seguir produz valores resumidos para cada território de vendas. O resumo lista a média de bônus recebida pelo pessoal de vendas em cada território e a soma das vendas acumuladas no ano para cada território.
USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)AS 'Average bonus', SUM(SalesYTD) AS 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
C. Usando AVG com DISTINCT
A instrução a seguir retorna o preço de tabela médio dos produtos.
USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Conjunto de resultados.
------------------------------
437.4042
(1 row(s) affected)
D. Usando AVG sem DISTINCT
Sem DISTINCT, a função AVG encontra o preço de tabela médio de todos os produtos na tabela Product.
USE AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;
Conjunto de resultados.
------------------------------
438.6662
(1 row(s) affected)