SQL
AGRUPAR REGISTROS
GROUP BY
MTRO. HÉCTOR SÁNCHEZ BELLO
• En la presentación de la clase 4, aprendimos que las funciones
de agrupamiento o agregado permiten realizar varios cálculos
operando con conjuntos de registros.
• Las funciones de agregado solo producen un valor de resumen
para todos los registros de un campo.
• Podemos generar valores de resumen para un solo campo,
combinando las funciones de agregado con la cláusula "group
by", que agrupa registros para consultas detalladas.
• Para saber la cantidad de libros de cada editorial, escribimos la
siguiente instrucción:
select editorial, count(*)
from biblioteca group by editorial;
La instrucción anterior nos muestra el nombre de la editorial y cuenta
la cantidad agrupando los registros por el campo "editorial". Como
resultado aparecen los nombres de las editoriales y la cantidad de
registros para cada valor del campo.
• También se puede agrupar por más de un campo, en tal caso,
luego del "group by" se listan los campos, separados por
comas. Todos los campos que se especifican en la cláusula
"group by" deben estar en la lista de selección (SELECT).
Select editorial, precio, cantidad, count(*)
From biblioteca
Group by editorial, precio, cantidad;
• Para obtener la cantidad de libros de cada editorial sin considerar con precio no nulo, se
hace con el siguiente código:
Select editorial, count(precio)
From biblioteca
Group by editorial;
• Para obtener la suma en dinero de los libros de cada editorial sin considerar con precio no
nulo, se hace con el siguiente código:
Select editorial, sum(precio)
From biblioteca
Group by editorial;
• Si lo que deseamos saber es el valor máximo y mínimo de los
libros agrupados por editorial se hace el siguiente código:
select editorial,
max(precio) as mayor, min(precio) as menor
from biblioteca
group by editorial;
• Y si lo que deseamos es calcular el promedio del valor de los
libros agrupados por editorial:
select editorial, avg(precio)
from biblioteca
group by editorial;
• Si lo que deseamos es hacer la consulta más explicita con alguna
limitación, empleamos la instrucción WHERE. Esto nos permite
agrupar solo los registros que cumplan dicha condición en WHERE:
• Para ello vamos a contar y agrupar por editorial considerando
únicamente los libros cuyo precio sean mayor a $ 40:
select editorial, count(*)
from biblioteca
where precio>40
group by editorial;