Share via


AVG (Transact-SQL)

Retorna a média dos valores em um grupo. Valores nulos são ignorados. Pode ser seguido pela cláusula OVER.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

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) dividido 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 Ciclos da Adventure Works usaram. Cada uma dessas funções agregadas produz um único valor de resumido para todas as linhas recuperadas.

USE AdventureWorks2008R2;
GO
SELECT AVG(VacationHours)AS 'Average vacation hours', 
    SUM  (SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';

Aqui está o conjunto de resultados.

Média de horas de férias Total de horas de ausência por doença

---------------------- ----------------------

25 97

(1 linha(s) afetada(s))

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 agregada produz um único valor para cada grupo, em vez da 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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

Aqui está o conjunto de resultados.

------------------------------

437.4042

(1 linha(s) afetada(s))

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 AdventureWorks2008R2;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

Aqui está o conjunto de resultados.

------------------------------

438.6662

(1 linha(s) afetada(s))