¿Qué es la cláusula SQL Group by?
La cláusula GROUP BY es un comando SQL que se usa para agrupar filas que tienen los mismos valores . La cláusula GROUP BY se usa en la instrucción SELECT. Opcionalmente, se usa junto con funciones agregadas para producir informes resumidos de la base de datos.
Eso es lo que hace, resumiendo los datos de la base de datos.
Las consultas que contienen la cláusula GROUP BY se denominan consultas agrupadas y solo devuelven una única fila por cada elemento agrupado.
Sintaxis de SQL GROUP BY
Ahora que sabemos qué es la cláusula GROUP BY de SQL, veamos la sintaxis de un grupo básico por consulta.
SELECT statements… GROUP BY column_name1[,column_name2,… ] [HAVING condition];
AQUÍ
- "Sentencias SELECT ..." es la consulta de comando SQL SELECT estándar.
- " GROUP BY column_name1" es la cláusula que realiza la agrupación basada en column_name1.
- "[, column_name2,…]" es opcional; representa otros nombres de columna 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 a la cláusula WHERE.
Agrupación mediante una sola columna
Para ayudar a comprender el efecto de la cláusula SQL Group By, 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 valores únicos para géneros. Podemos usar una consulta siguiente:
SELECT `gender` FROM `members` GROUP BY `gender`;
La ejecución del script anterior en MySQL workbench 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 solo 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".
Agrupación usando múltiples columnas
Supongamos que queremos obtener una lista de la categoría_id de la película 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`;
La ejecución del script anterior en MySQL workbench 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 el ID de categoría como en el año publicado para identificar filas únicas 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 los mismos para más de una fila, entonces se considera un duplicado y solo una fila. se muestra.
Funciones de agrupación y agregación
Supongamos que queremos el número total de hombres y mujeres en nuestra base de datos. Podemos usar el siguiente script que se muestra a continuación para hacer eso.
SELECT `gender`,COUNT(`membership_number`) FROM `members` GROUP BY `gender`;
La ejecución del script anterior en MySQL workbench 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 mediante la función agregada COUNT.
Restringir los resultados de la consulta mediante la cláusula HAVING
No siempre queremos realizar agrupaciones en todos los datos de una tabla determinada. Habrá ocasiones en las que querremos restringir nuestros resultados a ciertos criterios determinados. En tales casos, podemos usar la cláusula HAVING
Supongamos que queremos saber todos los años de lanzamiento de la categoría de película con el ID 8. Utilizaríamos el siguiente script para lograr nuestros resultados.
SELECT * FROM `movies` GROUP BY `category_id`,`year_released` HAVING `category_id` = 8;
La ejecución del script anterior en MySQL workbench 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 la identificación 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 usa junto con la instrucción SQL SELECT.
- La instrucción SELECT usada en la cláusula GROUP BY solo puede usarse para contener nombres de columna, funciones agregadas, constantes y expresiones.
- SQL Have Clause 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 varios registros y el conjunto de registros devuelto por una o más columnas.