Volver al blog

¿Qué es una función de agregación?

Una función de agregación es donde los valores se agrupan para formar una única respuesta. Las funciones de agregación SQL más comunes son SUM, COUNT, AVG, MIN y MAX.

¿Cómo uso las funciones de agregación?

Las funciones de agregación se pueden agrupar o simplemente ser el único valor, por ejemplo, digamos que tenemos una tabla con nombres y queremos contar cuántos nombres se repiten. Podríamos hacer algo así:

SELECT name, COUNT(*) from table_with_names group by name;

Esto va a agrupar nuestros resultados por name y contarlos, lo que significa que si el COUNT nos da más de 1, entonces habría un nombre repetido.

Usando la cláusula HAVING

Como vimos antes, podemos agrupar nombres y contar cuántos hay de cada uno en una tabla, pero ¿qué pasa si solo queremos los nombres que se repiten en más de 5 filas?

Podríamos usar having para obtener solo este resultado. La consulta sería:

SELECT name, COUNT(*) from table_with_names group by name
HAVING COUNT(name)>5;

Funciones de agregación en la cláusula WHERE

No podemos simplemente usar funciones de agregación en la cláusula WHERE, esto nos daría un error:

SELECT name, COUNT(*) as COUNT_A from table_with_names WHERE COUNT_A>5;

Como vimos antes, esto debería ir en una cláusula HAVING.

Sin embargo, podríamos usar una subconsulta con una función de agregación en una cláusula WHERE.

Digamos que solo queremos los resultados por encima del promedio en una tabla que tiene números:

SELECT number FROM table_with_numbers WHERE number>(SELECT AVG(number) FROM table_with_numbers);

Esta consulta sería correcta y nos daría solo los números por encima del promedio, aunque AVG también es una función de agregación.

Usando más de una función de agregación

Podés poner más de una función de agregación en una consulta, digamos que tenés una tabla con name, last name y números asociados a ellos y querés la suma de los números asociados a cada name y last name y el promedio, pero solo de las personas que están por encima del promedio:

SELECT name, lastname, SUM(number), AVG(number) FROM table_with_names_lastnames_numbers WHERE number>(SELECT AVG(number) FROM table_with_numbers)
GROUP BY 1,2;

Como pudiste ver con estos ejemplos, TENÉS que agrupar por cada otra columna que no sea una función de agregación. El único caso en el que no necesitás agrupar es cuando tu consulta solo va a devolver la función de agregación.

Usando funciones de agregación para análisis estadístico.

Las funciones de agregación son muy útiles para el análisis estadístico, podríamos usar STDDEV/STDEV, disponible en casi cualquier intérprete SQL, para obtener el desvío estándar de un dataset:

SELECT MAX(number), MIN(number), AVG(number), STDEV(number) FROM [Test].[dbo].[test]

Esto puede ser genial si estás haciendo algunos modelos básicos de machine learning o necesitás encontrar umbrales de situaciones anormales.

Usando otras funciones de agregación

Aunque COUNT, MAX, MIN, SUM, y AVG son funciones de agregación bastante estándar, cada base de datos y lenguaje derivado de SQL va a tener las suyas propias, podés ver una lista de las funciones de agregación disponibles en SQL Server acá y una lista de las funciones de agregación disponibles en OracleDB acá.

Conclusión

Las funciones de agregación, usadas de la forma correcta, son funciones útiles y poderosas para analizar nuestros datos, hacer dashboards, generar reportes y obtener información estadística.

Como analista de datos que soy, algunas de mis mejores y más importantes consultas las usan para obtener información útil, sobre todo cuando estás trabajando con Big Data.

Si vos también sos analista de datos, quizás este post también te sea útil.

¡Nos vemos en el próximo!

Read in English