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.
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)