AVG() en SQL: qué es, cómo se usa y ejemplos prácticos

En SQL, la función AVG() se utiliza para calcular el promedio (media aritmética) de los valores de una columna numérica. Es una de las funciones de agregación más usadas, junto con SUM(), COUNT(), MIN() y MAX().

Se emplea cuando necesitamos obtener indicadores estadísticos, como el salario medio de empleados, el precio promedio de productos o la calificación media de estudiantes.

Aunque su uso básico es sencillo, AVG() puede combinarse con GROUP BY, HAVING, subconsultas y funciones de ventana, lo que la convierte en una herramienta muy flexible en el análisis de datos.

Sintaxis de AVG()

La sintaxis básica es:

SELECT AVG(columna) 
FROM tabla
WHERE condición;
  • columna: debe ser un campo numérico (INT, DECIMAL, FLOAT, etc.).
  • tabla: el conjunto de datos sobre el cual se aplica.
  • WHERE: opcional, permite filtrar antes de calcular el promedio.

Ejemplos prácticos de AVG()

1. Promedio simple

SELECT AVG(salario) AS salario_promedio
FROM empleados;

👉 Devuelve el salario medio de todos los empleados de la tabla.

2. Promedio con filtro

SELECT AVG(precio) AS precio_medio
FROM productos
WHERE categoria = 'Electrónica';

👉 Calcula el promedio de precios únicamente de los productos electrónicos.

3. Promedio con GROUP BY

SELECT departamento, AVG(salario) AS promedio_sueldo
FROM empleados
GROUP BY departamento;

👉 Devuelve el salario medio agrupado por cada departamento.

4. Promedio con HAVING

SELECT categoria, AVG(precio) AS promedio
FROM productos
GROUP BY categoria
HAVING AVG(precio) > 100;

👉 Muestra solo las categorías cuyo precio promedio sea mayor a 100.

5. Promedio de valores distintos

SELECT AVG(DISTINCT precio) AS promedio_distinto
FROM productos;

👉 Calcula el promedio considerando solo valores únicos en precio con DISTINCT.

6. AVG() como función de ventana

SELECT nombre, salario,
       AVG(salario) OVER (PARTITION BY departamento) AS promedio_depto
FROM empleados;

👉 Devuelve el salario de cada empleado y, a la vez, el promedio de su departamento.

¿Qué tener en cuenta al usar AVG()?

  1. Solo funciona con datos numéricos. Si se aplica sobre columnas de texto dará error.
  2. Ignora los valores NULL: solo promedia filas con valores distintos de NULL.
  3. El tipo de resultado puede variar:
    • En enteros, puede devolver un valor decimal.
    • En algunos motores, conviene castear a DECIMAL o FLOAT para más precisión.
  4. Puede usarse junto a DISTINCT para promediar sin duplicados.

Errores comunes con AVG()

  • Olvidar el GROUP BY: SELECT departamento, AVG(salario) FROM empleados; ❌ Error: si se selecciona departamento junto con una agregación, se debe incluir GROUP BY.
  • Esperar que cuente los NULL: SELECT AVG(bonus) FROM empleados; 👉 Si muchos empleados tienen bonus = NULL, esos registros se ignoran, no se consideran como 0.
  • Problemas de precisión: en algunos SGBD, calcular el promedio sobre enteros grandes puede dar un resultado truncado. Conviene castear: SELECT AVG(CAST(salario AS DECIMAL(10,2))) FROM empleados;

AVG() vs. otras funciones agregadas

  • SUM(): devuelve la suma total, no el promedio.
  • COUNT(): cuenta filas; se puede combinar con SUM()/COUNT() para calcular promedios de forma manual.
  • MIN() / MAX(): dan el valor mínimo y máximo, complementando a AVG().

Ejemplo:

SELECT MIN(salario) AS minimo,
       MAX(salario) AS maximo,
       AVG(salario) AS promedio
FROM empleados;

Casos de uso frecuentes de AVG()

  1. Análisis de ventas: promedio de ingresos por mes.
  2. Recursos humanos: salario promedio por departamento o cargo.
  3. Educación: promedio de notas por estudiante.
  4. Comercio electrónico: precio promedio de productos en cada categoría.
  5. Control de calidad: promedio de defectos por lote.

Buenas prácticas al usar AVG()

  • Usar alias descriptivos (AS promedio_precio, AS salario_medio) para hacer más legible el resultado.
  • Si se esperan muchos valores nulos, usar COALESCE para convertirlos en 0 cuando corresponda: SELECT AVG(COALESCE(bonus,0)) FROM empleados;
  • Al trabajar con dinero o cálculos financieros, preferir DECIMAL sobre FLOAT para evitar errores de precisión.
  • Evitar usar AVG() en tablas enormes sin índices apropiados, ya que puede ser costoso en tiempo de ejecución.

Preguntas frecuentes (FAQ)

1. ¿AVG() cuenta los valores nulos?
No. Los ignora automáticamente.

2. ¿Puedo usar AVG() en una columna de texto?
No. Solo admite columnas numéricas.

3. ¿AVG() y SUM()/COUNT() siempre dan el mismo resultado?
Sí, en teoría AVG(columna) = SUM(columna)/COUNT(columna), salvo que haya NULL, ya que COUNT ignora los NULL en AVG().

4. ¿Qué diferencia hay entre AVG() y AVG(DISTINCT)?
AVG() considera todos los valores, mientras que AVG(DISTINCT) calcula el promedio eliminando duplicados.

5. ¿Puedo usar AVG() en una subconsulta?
Sí, es común calcular promedios dentro de subconsultas para compararlos en otra consulta.

Conclusión

La función AVG() en SQL es esencial para obtener promedios de datos numéricos en bases de datos. Desde consultas simples hasta análisis complejos con GROUP BY o funciones de ventana, su versatilidad la convierte en una herramienta imprescindible para cualquier profesional de datos.

Dominar AVG() y comprender cómo interactúa con NULL, DISTINCT y otras funciones agregadas es clave para producir reportes fiables y optimizar consultas analíticas.

Revisa más ejemplos de promedios en Funciones de agregación y consulta otras definiciones en el Glosario SQL completo.

Scroll al inicio