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!
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
68314.51
CLP |
305385.67
COP |
65.90
USD |
265.11
PEN |
1424.44
MXN |
2977.87
UYU |
Plan Anual |
738.82
BOB |
103560.24
CLP |
462944.29
COP |
99.90
USD |
401.89
PEN |
2159.35
MXN |
4514.26
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana