Cláusula SQL GROUP BY y HAVING con ejemplos

¿Qué es la cláusula SQL grupo por?

La cláusula GROUP BY es un comando SQL que se utiliza para agrupar filas que tienen los mismos valores. La cláusula GROUP BY se utiliza en la declaración SELECT. Opcionalmente, se utiliza junto con funciones agregadas para producir informes resumidos a partir de la base de datos.

Eso es lo que hace resumiendo datos de la base de datos.

Las consultas que contienen la cláusula GROUP BY se denominan consultas agrupadas y solo devuelven una fila por cada elemento agrupado.

GRUPO SQL POR Sintaxis

Ahora que sabemos qué es la cláusula SQL GROUP BY, veamos la sintaxis de una consulta básica de grupo por.

SELECT statements... GROUP BY column_name1[,column_name2,...] [HAVING condition];

AQUÍ

  • “Declaraciones SELECT…” es la consulta del comando SQL SELECT estándar.
  • "GRUPO POR nombre_columna1” es la cláusula que realiza la agrupación en función de nombre_columna1.
  • “[,nombre_columna2,…]” es opcional; representa otros nombres de columnas cuando la agrupación se realiza en más de una columna.
  • “[TENIENDO condición]” es opcional; se utiliza para restringir las filas afectadas por la cláusula GROUP BY. Es similar al Dónde cláusula.

Agrupar usando un Una sola columna

Para ayudar a comprender el efecto de la cláusula Group By de SQL, ejecutemos una consulta simple que devuelva todas las entradas de género de la tabla de miembros.

SELECT `gender` FROM `members` ;
gender
Female
Female
Male
Female
Male
Male
Male
Male
Male

Supongamos que queremos obtener los valores únicos de los géneros. Podemos utilizar la siguiente consulta:

SELECT `gender` FROM `members` GROUP BY `gender`;

Ejecutando el script anterior en MySQL banco de trabajo contra Myflixdb nos da los siguientes resultados.

gender
Female
Male

Tenga en cuenta que solo se han devuelto dos resultados. Esto se debe a que sólo tenemos dos tipos de género, Masculino y Femenino. La cláusula GROUP BY en SQL agrupó a todos los miembros "masculinos" y devolvió solo una fila. Hizo lo mismo con los miembros “Femeninos”.

Agrupar usando columnas multiples

Supongamos que queremos obtener una lista de categorías de películas y los años correspondientes en los que se estrenaron.

Observemos el resultado de esta simple consulta.

SELECT `category_id`,`year_released` FROM `movies` ;
category_id year_released
1 2011
2 2008
NULL 2008
NULL 2010
8 2007
6 2007
6 2007
8 2005
NULL 2012
7 1920
8 NULL
8 1920

El resultado anterior tiene muchos duplicados.

Ejecutemos la misma consulta usando group by en SQL –

SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;

Ejecutando el script anterior en MySQL El banco de trabajo contra myflixdb nos da los siguientes resultados que se muestran a continuación.

category_id year_released
NULL 2008
NULL 2010
NULL 2012
1 2011
2 2008
6 2007
7 1920
8 1920
8 2005
8 2007

La cláusula GROUP BY opera tanto en la identificación de categoría como en el año de publicación para identificar único filas en nuestro ejemplo anterior.

Si la identificación de la categoría es la misma pero el año de publicación es diferente, entonces una fila se trata como única. Si la identificación de la categoría y el año de publicación son iguales en más de una fila, entonces se considera un duplicado y solo una fila. se muestra.

Agrupación y Funciones agregadas

Supongamos que queremos conocer el número total de hombres y mujeres en nuestra base de datos. Podemos utilizar el siguiente script que se muestra a continuación para hacerlo.

SELECT `gender`,COUNT(`membership_number`)  FROM `members` GROUP BY `gender`;

Ejecutando el script anterior en MySQL El banco de trabajo contra myflixdb nos da los siguientes resultados.

gender COUNT('membership_number')
Female 3
Male 5

Los resultados que se muestran a continuación están agrupados por cada valor de género único publicado y el número de filas agrupadas se cuenta utilizando la función agregada COUNT.

Restringir los resultados de la consulta utilizando el TENIENDO cláusula

No siempre queremos realizar agrupaciones de todos los datos de una tabla determinada. Habrá ocasiones en las que querremos restringir nuestros resultados a un determinado criterio. En tales casos, podemos utilizar la cláusula HAVING.

Supongamos que queremos saber todos los años de estreno de la categoría de película id 8. Usaríamos el siguiente script para lograr nuestros resultados.

SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;

Ejecutando el script anterior en MySQL El banco de trabajo contra Myflixdb nos da los siguientes resultados que se muestran a continuación.

movie_id title director year_released category_id
9 Honey mooners John Schultz 2005 8
5 Daddy's Little Girls NULL 2007 8

Tenga en cuenta que solo las películas con ID de categoría 8 se han visto afectadas por nuestra cláusula GROUP BY.

Resumen

  • La cláusula GROUP BY SQL se utiliza para agrupar filas con los mismos valores.
  • La cláusula GROUP BY se utiliza junto con la Sentencia SELECCIONAR de SQL.
  • La instrucción SELECT utilizada en la cláusula GROUP BY solo puede contener nombres de columnas, funciones agregadas, constantes y expresiones.
  • La cláusula Have de SQL se utiliza para restringir los resultados devueltos por la cláusula GROUP BY.
  • La cláusula MYSQL GROUP BY se utiliza para recopilar datos de múltiples registros y registros devueltos establecidos por una o más columnas.