SQL GROUP BY y HAVING Clause con ejemplos
¿qué es la cláusula SQL Group by?
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 instrucción SELECT. Opcionalmente se utiliza junto con funciones de agregado para producir informes de resumen 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 sola fila para cada elemento agrupado.,
SQL GROUP BY Syntax
ahora que sabemos lo que es la cláusula SQL GROUP BY, veamos la sintaxis de un grupo básico por consulta.
SELECT statements... GROUP BY column_name1 ;
AQUÍ
- «SELECCIONE las declaraciones…»es la consulta estándar de comandos SQL SELECT.
- «GROUP BY column_name1» es la cláusula que realiza el agrupamiento basado en column_name1.
- «» Es opcional; representa otros nombres de columna cuando el agrupamiento se realiza en más de una columna.
- «» 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 devuelve todas las entradas de género de la tabla members.
SELECT `gender` FROM `members` ;
gender Female
Female
Male
Female
Male
Male
Male
Male
Male
Supongamos que queremos obtener los valores únicos para los géneros. Podemos usar la siguiente consulta –
SELECT `gender` FROM `members` GROUP BY `gender`;
ejecutar el script anterior en MySQL workbench contra Myflixdb nos da los siguientes resultados.,
gender Female
Male
nota 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 » juntos y devolvió solo una sola fila para ella. Hizo lo mismo con los miembros» femeninos».
agrupación usando múltiples columnas
supongamos que queremos obtener una lista de category_id de la película y los años correspondientes en los que se lanzaron.,
Vamos a observar el resultado de esta consulta sencilla
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.
vamos a ejecutar la misma consulta usando group by en SQL –
SELECT `category_id`,`year_released` FROM `movies` GROUP BY `category_id`,`year_released`;
ejecutar el script anterior en MySQL workbench contra el 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 el ID de la categoría es el mismo pero el año publicado es diferente, entonces una fila se trata como única .Si el ID de la categoría y el año publicado son los mismos para más de una fila, entonces se considera un duplicado y solo se muestra una fila.
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`;
Ejecutar el script de arriba en MySQL workbench en contra de la myflixdb nos da los siguientes resultados.,
gender COUNT('membership_number') Female 3 Male 5
los resultados que se muestran a continuación se agrupan por cada valor de género único publicado y el número de filas agrupadas se cuenta utilizando la función COUNT aggregate.
restringir los resultados de la consulta usando la cláusula HAVING
no siempre es que queramos realizar agrupaciones en todos los datos de una tabla dada. Habrá momentos en los que desearemos restringir nuestros resultados a un determinado criterio. En tales casos , podemos usar la cláusula HAVING
supongamos que queremos conocer todos los años de lanzamiento para 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;
ejecutar el 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
nota solo las películas con la categoría id 8 se han visto afectadas por nuestra cláusula GROUP BY.
Summary
- 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 utilizada en la cláusula GROUP BY solo se puede utilizar con nombres de columna, funciones agregadas, constantes y expresiones.
- La cláusula Having 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 varios registros y registros devueltos establecidos por una o más columnas.