La media es probablemente una de las métricas más utilizadas para describir algunas características de un grupo. En este artículo, cubriremos 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.
La función AVG() en Structured Query Language (SQL) te permite calcular el valor medio o promedio de los valores almacenados en una columna específica. Esta función devuelve el promedio de los valores de un grupo. AVG() calcula el promedio de un conjunto de valores dividiendo la suma de esos valores por el recuento de valores no NULL.
AVG() pertenece a una clase de funciones conocidas como funciones agregadas. Estas funciones son extremadamente importantes para el análisis, ya que a menudo es imposible revisar cada registro para obtener información de una tabla que puede contener millones de filas.
Sintaxis Básica y Funcionamiento de AVG()
La sintaxis básica de la función AVG() es muy sencilla e incluye pocos parámetros. 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. Para la consulta utiliza el comando SQL SELECT.
La función AVG() sólo funciona si el campo es numérico. Se entiende como el promedio a la suma de los valores dividido entre la cantidad de registros, sería algo como SUM/COUNT.
Lea también: IVA 21% Excel
Ejemplo Básico de Uso de AVG()
Imagina que trabajas como analista en el equipo de compensación de una empresa. Supongamos que quieres encontrar el nivel de habilidad promedio de los empleados. Puedes utilizar la función SQL AVG().
La sintaxis es:
SELECT AVG(campo) FROM tabla1 WHERE <condicion>
Por ejemplo, si tienes una tabla de productos, esta declaración devuelve el precio medio de lista de los productos en la base de datos.
Puedes 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. La función dentro del paréntesis se evalúa primero.
Manejo de Valores NULL y Duplicados
Hay un registro en nuestra tabla con un valor NULL en annual_salary, pero nuestra consulta no arroja 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.
Lea también: Guía IVA reducido
Si la columna tiene valores que se repiten, y deseas calcular el promedio de valores distintos, hay que utilizar una cláusula DISTINCT. Por ejemplo, en el primer caso, el valor 10.000 se incluyó tres veces, y el valor 5.000 se incluyó dos veces, afectando el promedio general.
Uso de AVG() con GROUP BY
La cláusula SQL GROUP BY se utiliza para agrupar filas. Cuando realizamos una consulta, podemos definir que los resultados se agrupen por los valores de un campo, de esta forma, luego podemos obtener valores como conteo, suma o promedio de valores, incluso obtener el mayor o el menor valor de un campo. Cuando se utiliza con una cláusula GROUP BY, cada función de agregado produce un solo valor que cubre cada grupo, en vez un solo valor que cubra toda la tabla.
Si quieres averiguar el salario medio de los empleados por departamento, esta es la forma correcta de hacerlo.
Agrupando por algún campo la sintaxis queda:
SELECT AVG(campo) FROM tabla1 INNER JOIN tabla2 ON (tabla1.key = tabla2.key) WHERE <condicion> GROUP BY <campo1>
Por ejemplo, podemos encontrar el promedio de turnos por día en un periodo. Para esta consulta debemos hacer uso de la función AVG, ya que lo nos piden es el promedio de turnos por día, en un periodo. Un ejemplo produce valores resumen para cada territorio de ventas en una base de datos.
Lea también: ¿Cómo localizar tus XML del SAT?
Uso de AVG() con HAVING
Adicionalmente cuando agrupamos podemos filtrar esos resultados agrupados aplicando criterios. Digamos que quieres encontrar los departamentos cuyos salarios medios superan los 10000. 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.
Es importante destacar que no se puede utilizar AVG() directamente en una condición WHERE, ya que WHERE se evalúa antes de que se calculen los agregados. Para filtrar resultados agrupados, se utiliza la cláusula HAVING. No es necesario tener AVG() en la sentencia SELECT para utilizarla en una cláusula HAVING.
Aquí, primero usamos una subconsulta para obtener el valor promedio de annual_salary de la tabla employees.
Uso de AVG() con Subconsultas y CASE
Puedes combinar la función AVG() con otros parámetros. Por ejemplo, también puedes utilizar AVG() con una sentencia CASE. Digamos que quieres mostrar "Alto" como categoría cuando el salario promedio es mayor a 7,000, y "Bajo" si es igual o menor. Se calcula la media de cada departamento y se compara con 7.000.
AVG() con la Cláusula OVER (Funciones de Ventana)
La cláusula OVER se utiliza para especificar una ventana o grupo de filas dentro de un conjunto de resultados de consulta, a la que se aplica la función agregada. La cláusula partition_by_clause divide el conjunto de resultados generado por la cláusula FROM en particiones a las que se aplica la función. Si no se especifica, la función trata todas las filas del conjunto de resultados de la consulta como un único grupo. La cláusula order_by_clause determina el orden lógico en el que se realiza la operación y es obligatoria dentro de OVER.
AVG es una función determinista cuando se utiliza con las cláusulas OVER y ORDER BY. AVG puede parecer que se comporta como una función no determinista cuando se usa con tipos de datos float y real.
Ejemplo con OVER
El siguiente ejemplo utiliza la función AVG con la cláusula OVER para proporcionar una media móvil de las ventas anuales para cada territorio en una tabla de ventas. Se crean particiones de los datos por TerritoryID y se ordenan lógicamente por SalesYTD. Esto significa que la función AVG se calcula para cada territorio en función del año de ventas. Para un TerritoryID específico, hay dos filas para un año de ventas, que representan a los dos vendedores con ventas ese año.
En otro ejemplo, la cláusula OVER no incluye PARTITION BY. Esto significa que la función se aplica a todas las filas devueltas por la consulta. La cláusula ORDER BY especificada en la cláusula OVER determina el orden lógico al que se aplica la función AVG. La consulta devuelve una media móvil de ventas por año para todos los territorios de ventas especificados en la cláusula WHERE.
Limitaciones de la Función AVG()
Aunque es útil, la media tiene limitaciones como métrica. 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. Cuando los valores son muy asimétricos, la mediana suele ser una mejor métrica.
