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 Tipo de valor devuelto

Categoría integer

int

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

ms177677.note(es-es,SQL.90).gifImportante:
No se admiten agregados Distinct, por ejemplo AVG(DISTINCT column_name), COUNT(DISTINCT column_name), MAX(DISTINCT column_name), MIN(DISTINCT column_name) y SUM(DISTINCT column_name) cuando se utilizan CUBE o ROLLUP. Si se utilizan, el SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) devuelve un mensaje de error y cancela la consulta.

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.

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.

Average vacation hours       Total sick leave hours 
----------------------       ---------------------- 
25                           97

(1 row(s) affected)

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) '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 row(s) affected)
 

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 row(s) affected)

Vea también

Referencia

Funciones de agregado (Transact-SQL)
OVER (cláusula de Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005