Vous êtes sur la page 1sur 3

Group by

La sentencia group by sirve para agrupar datos, según un determinado criterio, y


aplicar operaciones sobre los elementos del conjunto conformado.
La definición resulta un poco confusa, por lo tanto veamos la utilidad que tiene la
consulta group by a través de un ejemplo práctico.
Supongamos que ahora nos interesa saber la cantidad de servicios que brinda una
determinada empresa. Retomando la definición teórica que vimos al inicio, la
solución a esta consigna podríamos pensarla de la siguiente manera:
Conformaremos un grupo (agrupar datos) por cada empresa (criterio) y dentro de
cada grupo contabilizaremos (operación) la cantidad de servicios que ofrece.
Nuestra consulta mysql quedaría así:

select Empresas.Nombre,Servicios.Servicio,count(*) as CantidadServicios


from Empresas
inner join Servicios on Empresas.Id=Servicios.IdEmpresa
group by IdEmpresa

Observemos que en la línea número 4 especificamos la consulta group by. Es


muy importante respetar el orden de las sentencias mysql (select, from, inner join,
group by, etc). Por ejemplo, si haríamos el group by antes del inner join no
funcionaria como deseamos.

En el group by especificamos “IdEmpresa”. Este vendría a ser el criterio por el cual


deseamos agrupar las filas; en nuestro caso deseamos agrupar todas las filas que
correspondan a la misma empresa.

Una vez que tenemos armados los grupos, contabilizamos las filas que contiene
cada uno. Esto lo hacemos en la línea 1 de nuestra consulta mysql
mediante count(*) y volcamos el resultado del conteo dentro del campo
“CantidadServicios”.
Cada grupo representará una fila en el resultado final de nuestra consulta mysql
group by. Y como hemos aprendido previamente podemos utilizar la
sentencia mysql_fetch_array para imprimir en pantalla los resultados de una
consulta msyql.

Having

Así como la cláusula "where" permite seleccionar (o rechazar) registros


individuales; la cláusula "having" permite seleccionar (o rechazar) un grupo de
registros.
Si queremos saber la cantidad de libros agrupados por editorial usamos la
siguiente instrucción ya aprendida:
select editorial, count(*)
from libros
group by editorial;
Si queremos saber la cantidad de libros agrupados por editorial pero considerando
sólo algunos grupos, por ejemplo, los que devuelvan un valor mayor a 2, usamos
la siguiente instrucción:
select editorial, count(*) from libros
group by editorial
having count(*)>2;
Se utiliza "having", seguido de la condición de búsqueda, para seleccionar ciertas
filas retornadas por la cláusula "group by".
Veamos otros ejemplos. Queremos el promedio de los precios de los libros
agrupados por editorial, pero solamente de aquellos grupos cuyo promedio supere
los 25 pesos:
select editorial, avg(precio) from libros
group by editorial
having avg(precio)>25;
En algunos casos es posible confundir las cláusulas "where" y "having".
Queremos contar los registros agrupados por editorial sin tener en cuenta a la
editorial "Planeta".
Analicemos las siguientes sentencias:
select editorial, count(*) from libros
where editorial<>'Planeta'
group by editorial;
select editorial, count(*) from libros
group by editorial
having editorial<>'Planeta';
Ambas devuelven el mismo resultado, pero son diferentes. La primera, selecciona
todos los registros rechazando los de editorial "Planeta" y luego los agrupa para
contarlos. La segunda, selecciona todos los registros, los agrupa para contarlos y
finalmente rechaza fila con la cuenta correspondiente a la editorial "Planeta".
No debemos confundir la cláusula "where" con la cláusula "having"; la primera
establece condiciones para la selección de registros de un "select"; la segunda
establece condiciones para la selección de registros de una salida "group by".

Funciones de agregación
Las funciones de agregación en SQL nos permiten efectuar operaciones sobre un conjunto de resultados,
pero devolviendo un único valor agregado para todos ellos. Es decir, nos permiten obtener medias,
máximos, etc... sobre un conjunto de valores.

Las funciones de agregación básicas que soportan todos los gestores de datos son las siguientes:

o COUNT: devuelve el número total de filas seleccionadas por la consulta.


o MIN: devuelve el valor mínimo del campo que especifiquemos.
o MAX: devuelve el valor máximo del campo que especifiquemos.
o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en
columnas numéricas.
o AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar
en columnas

Las funciones de agregado realizan un cálculo sobre un conjunto de valores y devuelven un solo
valor. Si exceptuamos la función COUNT, todas las funciones de agregado ignoran los valores NULL.
Las funciones de agregado se suelen utilizar con la cláusula GROUP BY de la instrucción SELECT.
Todas las funciones de agregado son deterministas. Esto significa que las funciones de agregado
devuelven el mismo valor cada vez que se las llama con un conjunto específico de valores de
entrada.

Vous aimerez peut-être aussi