AVG (Transact-SQL)

Devuelve el promedio de los valores de un grupo. Los valores NULL se pasan por alto. Puede ir seguida de la cláusula OVER.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

AVG ( [ ALL | DISTINCT ] expression ) 

Argumentos

  • ALL
    Aplica la función de agregado a todos los valores. ALL es el valor predeterminado.

  • DISTINCT
    Especifica que AVG se ejecute sólo en cada instancia única de un valor, sin importar el número de veces que aparezca el valor.

  • expression
    Es una expresión de la categoría de tipo de datos numérico exacto o numérico aproximado, excepto para el tipo de datos bit. No se permite utilizar funciones de agregado ni subconsultas.

Tipos de valor devueltos

El tipo de valor devuelto viene determinado por el tipo del resultado evaluado de expression.

Resultado de la expresión

Valor devuelto

tinyint

int

smallint

int

int

int

bigint

bigint

Categoría decimal (p, s)

decimal(38, s) dividido por decimal(10, 0)

Categoría money y smallmoney

money

Categoría float y real

float

Notas

Si el tipo de datos de expression es un tipo de datos de alias, el tipo de valor devuelto es también del tipo de datos de alias. No obstante, si se asciende el tipo de datos base del tipo de datos de alias, por ejemplo, de tinyint a int, el valor devuelto es del tipo de datos ascendido, no del tipo de datos de alias.

AVG () calcula la media de un conjunto de valores dividiendo la suma de estos valores por el recuento de valores no NULL. Si la suma supera el valor máximo para del tipo de datos del valor devuelto, se devolverá un error.

Ejemplos

A. Utilizar las funciones SUM y AVG para los cálculos

En el ejemplo siguiente se calcula el promedio de horas de vacaciones y la suma de horas de baja por enfermedad que han utilizado los vicepresidentes de Adventure Works Cycles. Cada una de estas funciones de agregado produce un valor único de resumen para todas las filas 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%';

Éste es el conjunto de resultados.

Promedio de horas de vacaciones Total de horas de baja por enfermedad

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

25 97

(1 fila afectada)

B. Utilizar las funciones SUM y AVG con una cláusula GROUP BY

Cuando se utiliza con una cláusula GROUP BY, cada función de agregado produce un solo valor para cada grupo, en vez de para toda la tabla. En el ejemplo siguiente se obtienen valores de resumen para cada territorio de ventas. El resumen muestra el promedio de bonificaciones recibidas por los vendedores de cada territorio y la suma de las ventas realizadas hasta la fecha en cada territorio.

USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)AS 'Average bonus', SUM(SalesYTD) AS 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO

C. Utilizar AVG con DISTINCT

En la instrucción siguiente se devuelve el precio de venta promedio de los productos.

USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

Éste es el conjunto de resultados.

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

437.4042

(1 fila afectada)

D. Utilizar AVG sin DISTINCT

Sin DISTINCT, la función AVG busca el precio de venta promedio de todos los productos de la tabla Product.

USE AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

Éste es el conjunto de resultados.

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

438.6662

(1 fila afectada)