
En este tutorial, aprende
rás a usar la función AVG()
de SQL Server para calcular el valor promedio de un grupo de valores.
Introducción a la función AVG() de SQL Server
La función AVG()
de SQL Server es una función agregada que devuelve el valor promedio de un grupo de valores.
A continuación, se ilustra la sintaxis de la función AVG()
:
AVG([ALL | DISTINCT] expression)
Sintaxis:
ALL
indica a la funciónAVG()
que tome todos los valores para realizar el cálculo y obtener el promedio. ALL es el valor por defecto.- DISTINCT indica a la función
AVG()
que opere solo con valores únicos. - expression es una expresión válida que devuelve un valor numérico.
La función AVG()
ignora los valores NULL.
Función AVG() de SQL Server: ALL contra DISTINCT
Las siguientes declaraciones crean una nueva tabla, insertan algunos valores en la tabla y consultan datos en ella:
CREATE TABLE t(val dec(10,2));
INSERT INTO t(val) VALUES(1),(2),(3),(4),(4),(5),(5),(6);
SELECT val FROM t;
El siguiente ejemplo usa la función AVG()
calcula el promedio de todos los valores en la tabla t:
SELECT AVG(ALL val) FROM t;
Resultado:
avg_all
----------
3.750000
En este ejemplo, usamos el modificador ALL
, por lo tanto, la función promedio considera los ocho valores en la columna val en el cálculo:
(1 + 2 + 3 + 4 + 4 + 5 + 5 + 6) / 8 = 3.75
La siguiente instrucción usa la función AVG()
con el modificador DISTINCT:
SELECT AVG(DISTINCT val) FROM t;
Resultado:
avg_distinct
------------
3.500000
Debido al modificador DISTINCT, la función AVG()
realiza el cálculo en valores que son distintos:
(1 + 2 + 3 + 4 + 5 + 6) / 6 = 3.5
Ejemplos de la función AVG() de SQL Server
Veamos algunos ejemplos para ver cómo funciona la función AVG()
en la base de datos de prueba.
A) Ejemplo simple de SQL Server AVG()
El siguiente ejemplo devuelve el precio de lista promedio de todos los productos:
SELECT AVG(list_price) FROM production.products;
En este ejemplo, la función AVG()
devolvió un valor único para toda la tabla.
Aquí está el resultado:
B) AVG() de SQL Server con GROUP BY
Si utiliza la función AVG()
con una cláusula GROUP BY, la función AVG()
devuelve un valor único para cada grupo en lugar de un valor único para toda la tabla.
El siguiente ejemplo devuelve el precio de lista promedio para cada categoría de producto:
SELECT category_name, CAST(ROUND(AVG(list_price),2) AS DEC(10,2)) avg_product_price
FROM production.products p
INNER JOIN production.categories c ON c.category_id = p.category_id
GROUP BY category_name
ORDER BY category_name;
La siguiente imagen muestra el resultado:
C) AVG() de SQL Server con la cláusula HAVING
Vea el siguiente ejemplo:
SELECT brand_name, CAST(ROUND(AVG(list_price),2) AS DEC(10,2)) avg_product_price
FROM production.products p
INNER JOIN production.brands c ON c.brand_id = p.brand_id
GROUP BY brand_name
HAVING AVG(list_price) > 500
ORDER BY avg_product_price;
Resultado:
En este ejemplo:
- Primero, la cláusula GROUP BY divide los productos por marcas en grupos.
- En segundo lugar, la función
AVG()
calcula el precio de lista promedio para cada grupo. - En tercer lugar, la cláusula HAVING elimina las marcas donde cuyo precio de lista promedio es menor a 500.
En este tutorial, aprendiste a usar la función AVG()
de SQL Server para calcular el valor promedio de un conjunto de valores.