Blog
SQL define funciones para Funciones Agregadas que se encargan de hacer operaciones en toda una columna como sumatorias, contador, máximo, mínimo, media, concatenar strings, varianza …
Las dos funciones agregadas mas básicas son SUM y COUNT, las cuales pueden sumar el total de valores de una columna o contar el número de datos no nulos que existen respectivamente.
Otra función extremadamente usada es la de promedio AVG que simplemente toma la suma y la divide por la cuenta COUNT.
A continuación hay un ejemplo de las funciones en acción en una lista de estudiantes y sus notas:
CREATE TABLE notas (nombre TEXT, nota INTEGER); INSERT INTO notas (nombre, nota) VALUES ("Camilo", 97), ("David", 88), ("Juana", 98), ("Juliana", 82), ("Laura", NULL); SELECT "total estudiantes", COUNT(nombre) FROM notas; SELECT "total notas", COUNT(nota) FROM notas; SELECT "suma de notas", SUM(nota) FROM notas; SELECT "promedio notas", AVG(nota) FROM notas; SELECT "nota mas baja", MIN(nota) FROM notas; SELECT "nota mas alta", MAX(nota) FROM notas; SELECT "nombres", GROUP_CONCAT(nombre) FROM notas;
Totalizar números puede ser hecho con funciones matemáticas como SUM, COUNT, AVG, MIN, MAX, FIRST, LAST, STDEV, VAR, VARP etc.
Concatenar letras (strings) es usualmente hecho a través de funciones como GROUP_CONCAT que implica que simplemente concatena los campos, no es algo trivial y de igual manera no es tan importante para propósitos analíticos.
Agregando funciones en grupos con declaraciones
Cuando agrupamos filas, las funciones agregadas deben ser usadas en todos los campos que no formen parte de los campos agrupado. Esto se debe a que la referencia a una columna en un resultado de GROUP BY es ambigua. La referencia a una columna en una sentencia GROUP BY debe hacerse mediante una función de agregación.
Esto puede ser visto con un ejemplo, supongamos que tenemos la siguiente base de datos:
CREATE TABLE notas (nombre TEXT, clase INTEGER, nota INTEGER); INSERT INTO notas (nombre, clase, nota) VALUES ("Camilo",1, 97), ("David",1, 88), ("Juana",1, 98), ("Juliana",1, 82), ("Laura",1, NULL), ("Freddy", 2, 93), ("Julian", 2, 82), ("Rafael", 2, 87), ("Andrea", 2, 99), ("Simon", 2, 79);
Cuando agrupamos los resultados por clase, creamos dos tipos de campos en el resultado:
- Grupo por campo: clase
- Campos agregados: nombre, nota
El grupo por campos puede ser simplemente seleccionado, mientras que los campos agregados pueden ser sumados usando una función agregada.
Calculemos la nota promedio y la lista de estudiantes para cada clase usando la declaración GROUP BY.
CREATE TABLE notas (nombre TEXT, clase INTEGER, nota INTEGER); INSERT INTO notas (nombre, clase, nota) VALUES ("Camilo",1, 97), ("David",1, 88), ("Juana",1, 98), ("Juliana",1, 82), ("Laura",1, NULL), ("Freddy", 2, 93), ("Julian", 2, 82), ("Rafael", 2, 87), ("Andrea", 2, 99), ("Simon", 2, 79); SELECT clase, nombre, GROUP_CONCAT(nombre), AVG(nota) FROM notas GROUP BY clase;
Aquí se puede ver como la función GROUP_CONCAT nos da un mejor resultado que solo el nombre. En nombre solo podemos almacenar un solo nombre apareciendo solo Camilo y Freddy.
Ejercicio:
Para este ejercicio usaremos esta TABLA:
CREATE TABLE notas (nombre TEXT, clase INTEGER, nota INTEGER); INSERT INTO notas (nombre, clase, nota) VALUES ("Camilo",1, 97), ("David",1, 88), ("Juana",1, 98), ("Juliana",1, 82), ("Laura",1, NULL), ("Freddy", 2, 93), ("Julian", 2, 82), ("Rafael", 2, 87), ("Andrea", 2, 99), ("Simon", 2, 79);
Usando SQL y sus funciones agregadas, encuentra la nota mas alta para cada clase.
¡Enhorabuena! ya sabes emplear funciones AGREGADAS, pero no te detengas. Entra a nuestro curso y certifícate: