Contenido de esta guía
Qué mide AVG
AVG calcula la media aritmética de los valores no nulos de una expresión. Suma esos valores y los divide entre la cantidad de valores conocidos, no entre todas las filas.
Una media solo es útil cuando el conjunto responde a una pregunta concreta. «Precio medio» puede significar todos los productos, solo los disponibles o una media ponderada por unidades vendidas; son cálculos distintos.
Sintaxis básica
SELECT AVG(columna) AS promedio
FROM tabla
WHERE condicion;Redondea para presentar, no para filtrar. Conserva la precisión durante el cálculo y aplica ROUND al resultado visible. Redondear cada fila antes de promediar puede cambiar el valor final.
Ejemplo guiado: precio medio disponible
Primero excluimos los productos agotados. Añadimos COUNT(*) para que el denominador sea visible y el resultado pueda interpretarse.
SELECT COUNT(*) AS productos_con_stock,
ROUND(AVG(precio), 2) AS precio_medio
FROM productos
WHERE stock > 0;| productos_con_stock | precio_medio |
|---|---|
| 7 | 96,19 |
La media se calcula con siete productos. No está ponderada por el stock: un producto con treinta unidades pesa lo mismo que otro con dos.
AVG y los valores NULL
Si una columna contiene diez filas y dos son NULL, AVG(columna) divide entre ocho. Convertir esos nulos a cero con COALESCE cambia la pregunta y reduce la media; solo hazlo cuando cero sea realmente el valor que falta.
Error frecuente
Confundir media simple y media ponderada
AVG(precio) calcula la media de los precios de producto. Para conocer el precio medio por unidad vendida necesitarías ponderar por cantidad: sumar importe y dividir entre unidades. Elige la fórmula a partir de la pregunta, no del nombre de la función.
Comprueba lo aprendido
Calcula el pedido medio pendiente
Calcula el valor medio de total para los pedidos pendientes. Redondea a dos decimales y usa el alias pedido_medio_pendiente.
pedidos.estado = 'pendiente'.ROUND(AVG(total), 2).Solución razonada
SELECT ROUND(AVG(total), 2) AS pedido_medio_pendiente
FROM pedidos
WHERE estado = 'pendiente';| pedido_medio_pendiente |
|---|
| 140,05 |
Los seis pedidos pendientes suman 840,3; al dividir entre seis, la media es 140,05.
Compatibilidad entre motores
AVG está ampliamente disponible y omite entradas nulas. El tipo del resultado depende del tipo de datos y del motor. SQLite calcula avg() a partir de total()/count(); otros motores documentan tipos de retorno específicos para enteros, decimales o intervalos.
Qué debes recordar
AVGusa únicamente valores no nulos.- El filtro define el conjunto antes de calcular.
- Una media simple no pondera por cantidades.
- Redondear es una decisión de presentación.