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.
Convenciones 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 |
Importante: |
---|
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)