Volver a la lista de artículos Artículos
Lectura de 8 minutos

La función SQL AVG() explicada con ejemplos

Explicamos la función SQL AVG() con ejemplos prácticos, cubriendo cómo y dónde puedes y no puedes usarla.

La media es probablemente una de las métricas más utilizadas para describir algunas características de un grupo. Es tan versátil y útil que puede describir algo sobre casi todo.

Si te gustan los deportes, verás cosas como la media de carreras por partido en béisbol, la media de asistencias por partido o por temporada en baloncesto, etc. Todos los días se oyen afirmaciones como "en esta ciudad llueve una media de 10 días al mes" o "la temperatura se mantiene por encima de los 70 grados de media durante el verano".

En este artículo, cubriré el uso de la función SQL AVG() con algunos ejemplos de la vida real para ayudarte a hacer un buen uso de ella en situaciones prácticas. Lee el artículo.

¿Qué hace la función SQL AVG()?

La función SQL AVG() se utiliza para encontrar el promedio de valores sobre los registros de una tabla.

Para entenderlo con un ejemplo, considera la siguiente tabla que contiene registros de empleados.

employees

employeenumberlastnameskill_levelannual_salarydepartment
1056Patterson1010000Finance
1076Firrelli10NULLMarketing
1088Patterson6012500Finance
1102Bondur2110000Human Resources
1143Bow105000Sales
1165Jennings105000Sales
1166Thompson1010000Marketing

Ejemplo 1

Supongamos que quieres encontrar el nivel de habilidad promedio de los empleados. Puede utilizar la función SQL AVG(). Esta es la consulta:

SELECT AVG(skill_level)
FROM employees;

Este es el resultado:

AVG(skill_level)
18.714285714285715

La función AVG() toma un nombre de columna como argumento (también conocido como operando) y luego calcula el promedio de todos los valores de la columna. Así, en este caso, nuestra consulta devuelve la media de todos los valores de la columna skill_level.

Puede observar que el resultado se muestra con muchos decimales. Dado que rara vez se necesita tanta precisión, es posible que desee redondear este número al número entero más cercano. Puede usar AVG() anidado en otras funciones SQL como ROUND(), así:

SELECT ROUND(AVG(skill_level))
FROM employees;

El resultado ahora se ve así:

AVG(skill_level)
19

La función dentro del paréntesis se evalúa primero. Así, la consulta calcula primero la media y luego redondea el resultado para obtener el valor 19.

Ejemplo 2

En el ejemplo anterior, hemos utilizado AVG() en la parte de la consulta SELECT. Veamos otros ejemplos de SQL AVG().

Digamos que quieres obtener una lista de los empleados cuyos salarios están por encima de la media de la empresa. Si eres nuevo en SQL, tu primer instinto puede ser escribir algo como esto:

SELECT lastname
FROM   employees
WHERE  annual_salary > AVG(annual_salary);

Cuando lo ejecute, obtendrá un resultado como éste:

ERROR 1111 (HY000): Invalid use of group function

Esta consulta arroja un error, porque no se puede utilizar AVG() en una condición WHERE. Dado que AVG() es una función de grupo, sólo puede utilizarla en una sentencia SELECT o en una cláusula HAVING.

En su lugar, ejecute la siguiente consulta:

SELECT   lastname, annual_salary
FROM     employees
WHERE    annual_salary > (SELECT AVG(annual_salary)
		 		    FROM employees);

Este es el resultado:

lastnameannual_salary
Patterson10000
Patterson12500
Bondur10000
Thompson10000

La consulta dentro de una consulta principal se llama subconsulta. Aquí, primero usamos una subconsulta (resaltada abajo) para obtener el valor promedio de annual_salary de la tabla employees tabla. Luego lo comparamos con cada valor de la columna para obtener el resultado.

SELECT  lastname, annual_salary
FROM    employees
WHERE   annual_salary > (SELECT AVG(annual_salary)
				 FROM employees);

¿Ves algo interesante?

Hay un registro en nuestra tabla con un valor NULL en annual_salary, pero nuestra consulta no arrojó un error. Esto se debe a que la función SQL AVG() ignora NULLs y simplemente calcula la media de los demás registros con valores numéricos. Es decir, ignora el valor de la fila que se muestra a continuación.

employeenumberlastnameskill_levelannual_salarydepartment
1076Firrelli10NULLMarketing

AVG() con una cláusula DISTINCT

Imagina que tienes algunos datos duplicados en tus tablas, y quieres ignorar los valores duplicados al calcular la media.

Para hacer esto en SQL, hay que utilizar una cláusula DISTINCT. Puedes ver que la columna annual_salary de nuestra tabla employees tiene valores que se repiten, por ejemplo, 5000 y 10000. Si queremos que SQL considere estos valores sólo una vez, utilizamos AVG() con una cláusula DISTINCT.

Así es como los resultados difieren:

QueryResult
SELECT AVG(annual_salary) FROM employees;8750.00
SELECT AVG(DISTINCT annual_salary) FROM employees;9166.667

En el primer caso, el valor 10.000 se incluyó tres veces, y el valor 5.000 se incluyó dos veces. En el segundo caso, estos valores se contaron sólo una vez cada uno, de ahí la diferencia en los resultados.

Funciones de agregación

AVG() pertenece a una clase de funciones conocidas como funciones agregadas. Una función de agregación devuelve un único resultado calculado sobre varias filas.

Estas funciones son extremadamente importantes para el análisis. A menudo es imposible revisar cada registro para obtener información de una tabla que puede contener millones de filas. Por lo tanto, se agregan estos millones de filas en grupos significativos.

Por ejemplo, digamos que trabajas en Facebook y quieres averiguar qué grupos de edad pasan más tiempo en tu aplicación. En este caso, creas grupos o cubos de diferentes grupos de edad y luego encuentras el tiempo medio de cada cubo.

Aquí están algunas de las otras funciones agregadas, cada una con un ejemplo de uso:

Aggregate FunctionExample Use Case
SUM()Find the sum of salaries by department.
COUNT()Find the number of employees in each department.
MAX()Find the highest salary paid in each department.
MIN()Find the lowest salary paid in each department.
AVG()Find the average salary for each department.

Si no te queda muy claro ahora, no te preocupes. Tengo algunos buenos ejemplos de SQL AVG() a continuación.

La función SQL AVG() con una cláusula GROUP BY

Para demostrar como AVG() trabaja como una función agregada en la práctica, déjame mostrarte como puedes usar AVG() con una cláusula GROUP BY.

La cláusula SQL GROUP BY se utiliza para agrupar filas. En la mayoría de los casos, una cláusula GROUP BY tiene una o más funciones agregadas que calculan una o más métricas para el grupo.

Ejemplo 3

Imagine que trabaja como analista en el equipo de compensación de una empresa. Quiere averiguar el salario medio de los empleados por departamento. Para ello, puede utilizar una cláusula GROUP BY con AVG() como ésta:

SELECT     department,
	      AVG(annual_salary)
FROM       employees
GROUP BY   department;

Este es el resultado de esta consulta:

departmentAVG(annual_salary)
Finance11250.00
Marketing10000.00
Human Resources10000.00
Sales5000.00

Agrupa todos los registros por departamento y luego calcula la media annual_salary de cada departamento.

Ejemplo 4

Si trabaja en una gran empresa con muchos departamentos, es posible que quiera centrarse en los departamentos cuyo salario medio es superior a un valor específico. Para ello, debe filtrar algunos grupos del resultado de su consulta.

Digamos que quiere encontrar los departamentos cuyos salarios medios superan los 10000. Su consulta tiene el siguiente aspecto:

SELECT     department,
	      AVG(annual_salary)
FROM       employees
GROUP BY   department
HAVING     AVG(annual_salary) > 10000;

Este es el resultado de la consulta:

departmentAVG(annual_salary)
Finance11250.00

Como sólo el departamento de Finanzas tiene un salario medio superior a 10.000, es la única fila que se devuelve.

Para saber más sobre cómo filtrar registros con funciones de agregación, lea este artículo.

No es necesario tener AVG() en la sentencia SELECT para utilizarla en una cláusula HAVING. Por ejemplo, la siguiente consulta le da sólo el nombre del departamento en el resultado:

SELECT      department
FROM        employees
GROUP BY    department
HAVING      AVG(annual_salary) > 10000;

Y el resultado:

department
Finance

La función SQL AVG() con una sentencia CASE

También puede utilizar AVG() con una sentencia CASE. Si no está familiarizado con CASE, eche un vistazo a este artículo.

Ejemplo 5

Digamos que quiere mostrar "Alto" como categoría cuando el salario promedio es mayor a 7,000, y "Bajo" si es igual o menor. Este es el aspecto de la consulta:

SELECT department,
	   CASE WHEN AVG(annual_salary) > 7000 THEN 'High'
	   ELSE 'Low' END as category
FROM employees
GROUP BY department;

El resultado de esta consulta:

departmentcategory
FinanceHigh
MarketingHigh
Human ResourceHigh
SalesLow

Se calcula la media de cada departamento y se compara con 7.000. Si el salario medio de un departamento es superior a 7.000, entonces se devuelve 'High' como su category.

Cuándo no utilizar AVG()

Aunque es útil, la media tiene limitaciones como métrica. Esto es especialmente cierto cuando los valores de su conjunto de datos están muy sesgados.

Por ejemplo, supongamos que tiene un canal de YouTube y que ha subido 20 vídeos hasta ahora. Uno de los vídeos ha alcanzado el millón de visitas, pero el resto aún no ha visto ninguna tracción. Aunque técnicamente es posible calcular la media, en realidad, sólo un vídeo contribuye a la media de 200.000.

Cuando los valores son muy asimétricos, la mediana suele ser una mejor métrica. La mediana es el valor del percentil 50 de una serie; es decir, es el punto en el que la mitad de los valores de la serie/grupo están por debajo y la otra mitad por encima.

¿Está preparado para utilizar la función SQL AVG() en sus consultas?

A estas alturas, debería tener una buena comprensión de la función SQL AVG() y de las diversas formas de utilizarla. Si estás empezando y quieres una carrera que trate con datos, SQL es una herramienta que debes aprender.

Para aprender más sobre funciones estándar como AVG(), recomiendo este curso de LearnSQL.es. El curso está maravillosamente diseñado y refuerza el aprendizaje en todo momento para ayudarte a retener lo que aprendes. Si estás súper entusiasmado por aprender SQL de principio a fin, entonces echa un vistazo al curso SQL A to Z.

Las claves para llegar a ser hábil en SQL son practicar y mantenerse siempre actualizado con los desarrollos y las nuevas características. Así que sigue leyendo los artículos de LearnSQL.es para saber más y lo último en SQL.

¡Feliz aprendizaje!