Artículos de Tecnología > Data Science

Funciones de agregación con GROUP BY en SQL, ¿cómo utilizarlas?

Alex Felipe
Alex Felipe

Conocer las funciones predefinidas de SQL nos ayuda a tener más productividad en el día a día, en este artículo mostraré cómo utilizar las funciones de agregación con GROUP BY.

Creé una tabla libros e inserté todas las compras que realicé:

SELECT * FROM libros;
id: 1
nombre: Plataforma Java EE
autor: Alberto Souza
valor: 39.90
fecha_compra: 2015-12-05

id: 2
nombre: Google Android 
autor: João Bosco Monteiro
valor: 25.90
fecha_compra: 2015-12-10

id: 3
nombre: Spring MVC
autor: Alberto Souza
valor: 45.90
fecha_compra: 2015-12-10

id: 4
nombre: A Web Mobile
autor: Sergio Lopes
valor: 26.90
fecha_compra: 2016-01-04

id: 5
nombre: REST
autor: Alexandre Saudate
valor: 39.90 
fecha_compra: 2015-01-12

id: 6
nombre: SQL
autor: Eduardo Gonçalves
valor: 23.90 
fecha_compra: 2015-12-05

¡Excelente! Los libros que compré están bien ordenados. Hasta puedo hacer queries para verificar, por ejemplo, cuáles fueron los libros que pagué más que R$ 30,00:

SELECT * FROM libros 
WHERE valor > 30;
SELECT * FROM libros;
id: 1
nombre: Plataforma Java EE
autor: Alberto Souza
valor: 39.90
fecha_compra: 2015-12-05

id: 3
nombre: Spring MVC
autor: Alberto Souza
valor: 45.90
fecha_compra: 2015-12-10

id: 5
nombre: REST
autor: Alexandre Saudate
valor: 39.90 
fecha_compra: 2015-01-12

Sin embargo, ahora quería saber cuánto gasté con todos los libros que pagué más que R$ 30,00. Es decir, ¡quiero hacer una suma! ¿Cómo podemos hacer eso en SQL? Es muy sencillo: ya existen funciones predefinidas por las bases de datos para realizar cálculos. Podemos, por ejemplo, usar la función SUM para sumar:

SELECT SUM(valor) AS total
FROM libros WHERE valor > 30;
total  | 125.70 

Estas funciones se llaman funciones de agregación. Ellas agrupan todas las líneas encontradas y devuelven solo una única línea con el resultado de la operación requerida. En este caso, una suma :)

Conseguí verificar cuánto gasté con libros sobre los R$ 30,00, pero ahora necesito saber ¡cuánto gasté por mes! En mi tabla, las fechas son completas, es decir: tiene día, mes y año. Pero, en este caso, solo necesito del mes... ¿cómo podemos devolver solo el mismo de una fecha? ¡Sencillo! De la misma forma que la base de datos facilitó una función para sumar, ¡también facilita una función para devolver el mes de una fecha! Utilizamos MONTH() que extrae el mes de una determinada fecha:

SELECT nombre, valor, MONTH(fecha_compra) AS mes FROM libros;
id: 1
nombre: Plataforma Java EE
autor: Alberto Souza
valor: 39.90
mes: 12

id: 2
nombre: Google Android 
autor: João Bosco Monteiro
valor: 25.90
mes: 12

id: 3
nombre: Spring MVC
autor: Alberto Souza
valor: 45.90
mes: 12

id: 4
nombre: A Web Mobile
autor: Sergio Lopes
valor: 26.90
mes: 1

id: 5
nombre: REST
autor: Alexandre Saudate
valor: 39.90 
mes: 1

id: 6
nombre: SQL
autor: Eduardo Gonçalves
valor: 23.90 
mes: 12

Entonces, ahora que sabemos cómo sumar y como tomar el mes, ¡basta juntar las dos funciones! Vamos a hacer nuestra nueva query:

SELECT SUM(valor) AS total, MONTH(fecha_compra) AS mes FROM libros;
total  | 125.70 

Oye, ¿solo mes 12? ¿Y R$ 202,40 solo en el mes 12? Estoy casi seguro que no fue tanto así. Filtremos esta query para que devuelva solo los libros comprados en el mes 12:

SELECT SUM(valor) AS total, MONTH(fecha_compra) AS mes FROM libros WHERE MONTH(fecha_compra) = 12;
total: 135.60
mes: 12

¿Qué está pasando? ¿No podemos exhibir más de una línea con una función de agregación? Muy raro eso. Como vimos, las funciones de agregación en principio devuelven solo una única línea. Lo que tenemos que hacer es informar que queremos agrupar las líneas por mes, ¡sumarlas! Para ello utilizaremos la instrucción GROUP BY informando qué columna queremos agrupar:

SELECT SUM(valor) AS total, MONTH(fecha_compra) AS mes 
FROM libros 
GROUP BY MONTH(fecha_compra);
total: 66.80
mes: 1
total: 135.60
mes: 12

¡Excelente, mira que ahora podemos comprobar cuanto se ha gastado al mes! Vimos que cuando usamos funciones de agregación (como SUM()) por estándar el blanco nos devuelve solo una única línea con el resultado de todas las líneas que se encontraron. Pero, si queremos que la función agrupe por diferente de otra columna (como el mes), debemos informar que esta columna será agrupada usando la instrucción GROUP BY.

Entonces, ¿le gustó la función SUM() y el GROUP BY? ¿Estás listo para usarla en su base de datos? Para continuar desarrollandote, ¡mira nuestros cursos de Data Science aquí en Alura!

Artículos de Tecnología > Data Science

En Alura encontrarás variados cursos sobre Data Science. ¡Comienza ahora!

  • 118 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro para resolver tus dudas
  • Descuento de lanzamiento de 30%

Trimestral

Descuento de lanzamiento de 30%
  • 118 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro para resolver tus dudas
US$19,90
un pago de US$29,90 US$19,90
¡Quiero empezar a estudiar!

Paga en moneda local en los siguientes países

Semestral

Descuento de lanzamiento de 30%
  • 118 cursos

    Cursos de Programación, Front End, Data Science, Innovación y Gestión.

  • Videos y actividades 100% en Español
  • Certificado de participación
  • Estudia las 24 horas, los 7 días de la semana
  • Foro para resolver tus dudas
US$33,90
un pago de US$49,90 US$33,90
¡Quiero empezar a estudiar!

Paga en moneda local en los siguientes países

Acceso a todos los cursos
Estudia las 24 horas, dónde y cuándo quieras
Nuevos cursos cada semana