CodeGym /Cursos /SQL SELF /Valores medios con AVG() — cálculo de prome...

Valores medios con AVG() — cálculo de promedios por columnas

SQL SELF
Nivel 7 , Lección 3
Disponible

Si alguna vez intentaste calcular la nota media de exámenes o, por ejemplo, el salario promedio en un departamento, ya conoces el concepto de media aritmética. Y bueno, en realidad esto lo enseñan mucho en el cole. En SQL, cualquier tarea relacionada con el cálculo del valor promedio en un conjunto de datos se resuelve con la función AVG().

La función AVG() es una función agregada que calcula la media aritmética para una columna numérica. Suma todos los valores en la columna indicada y divide el resultado por la cantidad de esos valores. No le hace caso a NULL (y este ignore, curiosamente, nos facilita la vida, pero de eso hablamos luego).

Sintaxis de AVG()

Vamos a empezar con la sintaxis básica:

SELECT AVG(columna)
FROM tabla;

Ojo: aquí columna es la columna que contiene los valores numéricos para los que quieres sacar el promedio.

Ejemplo 1: Salario promedio de empleados

Imagina que tenemos una tabla employees donde guardamos datos de empleados y sus salarios:

id name salary
1 Otto 50000
2 Maria 60000
3 Alex 55000
4 Anna NULL
5 Dan 52000

Consulta sencilla para calcular el salario promedio:

SELECT AVG(salary) AS average_salary
FROM employees;

Resultado:

average_salary
54250

¿Cómo funciona esto?

  • AVG() suma todos los salarios: 50000 + 60000 + 55000 + 52000 = 217000.
  • Divide la suma entre la cantidad de valores no nulos: 217000 / 4 = 54250.

Particularidades de AVG() con NULL

Pudiste notar que para calcular el salario promedio el valor NULL en la columna salary fue ignorado. Esta es una característica clave de AVG(). Solo tiene en cuenta los valores que no son NULL.

Probemos un ejemplo:

SELECT AVG(NULL) AS resultado;

Resultado:

resultado
NULL

Esto confirma una vez más que AVG() ignora NULL. Sin embargo, si todo el conjunto de datos es NULL, el resultado será NULL.

Pero si en la tabla hay un 0 en vez de NULL, ese resultado no se ignora.

Tabla employees

id salary
1 1000
2 0
3 NULL
4 2000

Consulta SQL:

SELECT AVG(salary) AS avg_salary
FROM employees;

Resultado:

avg_salary
1000

¿Por qué pasa esto?

Porque AVG() calcula:

[(1000 + 0 + 2000) / 3 = 1000]

La fila con NULL se ignora al calcular el promedio.

Ejemplo: Calcular la edad promedio de estudiantes

Ahora vamos a la tabla students:

id name age
1 Anna 20
2 Max 22
3 Maria NULL
4 Otto 21

Consulta:

SELECT AVG(age) AS average_age
FROM students;

Resultado:

average_age
21
  • AVG() ignora a la estudiante Maria porque su edad es NULL.
  • El promedio se calcula así: (20 + 22 + 21) / 3 = 21.

Redondear el resultado

A veces el resultado de AVG() devuelve un valor decimal con varios dígitos después del punto.

Si necesitas un número redondeado, puedes usar la función ROUND().

Tabla employees

id salary
1 50000
2 60000
3 47000
4 NULL

Consulta SQL

SELECT ROUND(AVG(salary), 2) AS rounded_average_salary
FROM employees;

Resultado

rounded_average_salary
52333.33

La fila con NULL se excluye del cálculo, así que el promedio se saca sobre tres valores.

Filtrar datos antes de calcular AVG()

Si quieres calcular el promedio solo para valores que cumplen ciertas condiciones, usa WHERE.

Tabla employees

id salary
1 50000
2 60000
3 47000
4 60000
5 NULL

Ejemplo: Buscamos el salario promedio de empleados cuyo id > 2.

SELECT AVG(salary) AS average_salary
FROM employees
WHERE id > 2;

Resultado

average_salary
53500

Solo se tienen en cuenta los salarios con id = 3 y id = 4. La fila con NULL se excluye.

Ejemplo: Consultas complejas con AVG()

Se puede combinar la función AVG() con otras funciones agregadas y operadores.

Supón que tenemos una tabla de ventas sales:

sale_id product quantity price
1 Teléfono 2 500
2 Portátil 1 1500
3 Tableta 3 300

Consulta para calcular el promedio del total de ventas:

SELECT AVG(quantity * price) AS average_total_sale
FROM sales;

Resultado:

averagetotalsale
950

Trucos de la vida y errores típicos

Trabajar con AVG() requiere cuidado para evitar errores comunes:

Valores NULL: a veces sorprende por qué el resultado es más bajo de lo esperado. Recuerda que AVG() salta las filas con NULL.

Mezcla de tipos de datos: si en la columna hay números y texto mezclados (lo cual ya de por sí es mala práctica), AVG() dará error.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION