21st Jul 2022 Lectura de 6 minutos Uso de GROUP BY en SQL Zahin Rahman SQL aprender SQL agrupar por Índice Sintaxis de GROUP BY Agrupar por una sola columna Agrupación con funciones agregadas MAX(), MIN(), AVG(), SUM() Agrupar por múltiples columnas con COUNT() Dominio de SQL GROUP BY Ahora que conoce los comandos principales de SQL, potencie sus consultas con la cláusula GROUP BY y las funciones de agregación. GROUP BY es una cláusula SQL que organiza los datos en grupos basados en un valor (o valores) común. Se utiliza ampliamente para obtener información resumida de grandes conjuntos de datos, así como para calcular estadísticas agregadas básicas. Una vez que haya comprendido los comandos básicos de SQL como SELECT, WHERE, y JOIN, el dominio de la cláusula GROUP BY puede ayudarle a implementar sus conocimientos de SQL en escenarios de inteligencia empresarial del mundo real. SQL GROUP BY se utiliza con mayor frecuencia en combinación con funciones de agregación como COUNT(), MAX(), MIN(), SUM() y AVG(). Agrupa el conjunto de resultados por una o más columnas, creando esencialmente filas de resumen para cada grupo. Estos grupos suelen basarse en valores categóricos y no continuos. Por ejemplo, si utiliza un conjunto de datos de clientes globales para su empresa, puede utilizar la cláusula GROUP BY para resumir información como el "número total de clientes por cada país" o el "total de ventas por cliente". Sintaxis de GROUP BY Ahora que sabemos qué es la cláusula GROUP BY, veamos la sintaxis de una consulta básica de GROUP BY. SELECT column_name(s) FROM table_name WHERE [condition] GROUP BY column_name1, column_name2 HAVING [condition] ORDER BY column_name Aquí: SELECT es la consulta estándar de SQL SELECT. GROUP BY column_name1 realiza la agrupación basada en los valores de column_name1. column_name2 se utiliza cuando la agrupación se realiza en más de una columna; se puede agrupar por cualquier número de columnas. Esto es opcional. HAVING [condition] y WHERE [condition] también son opcionales; ambos se utilizan para restringir las filas afectadas por la cláusula GROUP BY. La diferencia clave es que WHERE filtra las filas antes de la agrupación y HAVING filtra los propios grupos una vez formados. Importante: WHERE debe preceder a la cláusula GROUP BY y HAVING debe seguirla. ORDER BY [condition] se utiliza después de GROUP BY para clasificar u ordenar los datos por un determinado column_name. Al principio, GROUP BY y ORDER BY parecen hacer lo mismo: ordenar los datos. Pero ahí acaban sus similitudes. Como su nombre indica, ORDER BY simplemente ordena el conjunto de datos en un orden definido, mientras que GROUP BY agrupa los datos como una salida agregada. Nuestro artículo anterior, La diferencia entre GROUP BY y ORDER BY en palabras sencillas, explica esto con más detalle; consúltelo si necesita un repaso. Ahora, veamos cómo funciona la cláusula GROUP BY con consultas reales. Agrupar por una sola columna Para ayudar a entender el efecto de la cláusula GROUP BY, vamos a ejecutar una consulta sencilla en la tabla Orders que ha registrado 196 pedidos individuales. A continuación, puede ver las cinco primeras entradas de la tabla: OrderIDCustomerIDEmployeeIDOrderDateShipperID 102489051996-07-043 102498161996-07-051 102503441996-07-082 102518431996-07-081 102527641996-07-092 Utilizando la tabla Orders averigüemos cuántos clientes únicos han realizado un pedido. Esta es la consulta: SELECT CustomerID FROM Orders GROUP BY CustomerID RESULTADO Number of Records: 74 CustomerID 2 3 4 5 7 Este es un ejemplo de una simple cláusula GROUP BY sobre una sola columna (CustomerID); la salida coloca todas las filas con el mismo valor para la columna CustomerID en el mismo grupo. También devuelve el número de clientes únicos que han realizado un pedido (74). Esencialmente, una cláusula GROUP BY sin una función de agregación se comporta de forma similar a una cláusula DISTINCT: encuentra los valores únicos de una columna. La agrupación también puede hacerse por múltiples columnas. Esto es más útil cuando se utiliza con la(s) función(es) agregada(s). Agrupación con funciones agregadas La aplicación práctica del comando GROUP BY de SQL es resumir los parámetros estadísticos de grupos de datos; esto se consigue normalmente con funciones de agregación. Ahora exploraremos algunos ejemplos, utilizando las funciones Orders y la tabla OrderDetails tabla, un ejemplo de la cual se muestra a continuación: OrderDetailIDOrderIDProductIDQuantity 1102481112 2102484210 310248725 410249149 5102495140 MAX(), MIN(), AVG(), SUM() GROUP BY es perfecta para resumir los parámetros estadísticos de categorías individuales en su conjunto de datos. Por ejemplo, intentemos encontrar la cantidad máxima, mínima y media de cada ProductID por pedido y el número total de cada producto pedido. Utilizaremos la OrderDetails y pondremos los resultados en orden descendente por la suma de las cantidades pedidas de cada producto. Esto nos permitirá saber cuáles son los productos más populares de ProductID. Esta es la consulta: SELECT ProductID, MAX(Quantity), Min(Quantity), AVG(Quantity), SUM (Quantity) FROM OrderDetails GROUP BY ProductID Order By SUM(Quantity) DESC RESULTADO Number of Records: 77 ProductIDMAX(Quantity)Min(Quantity)AVG(Quantity)SUM (Quantity) 3170432.714285714285715458 6080635.833333333333336430 35100441369 5970624.714285714285715346 260731341 La siguiente tabla desglosa cómo se calculan algunos de estos valores agregados para los valores 2 y 31 de ProductID. La cláusula GROUP BY primero agrupa las filas para ProductID 2 y luego calcula los valores AVG() y MAX() para todo el grupo. Hace lo mismo para cada ProductID para cada una de las funciones agregadas en la consulta. ProductIDQuantityAverage (?Quantity/# of ProductID)Max (Quantity) 2603160 250 245 240 235 ………… 317032.71470 3160 3156 3142 3140 ………… Como ve, el comando GROUP BY es una herramienta extremadamente útil para encontrar resúmenes estadísticos para cualquier clase de variables. Agrupar por múltiples columnas con COUNT() Como se mencionó anteriormente, puede utilizar múltiples columnas en GROUP BY. En otras palabras, está colocando todas las filas con los mismos valores tanto en column_name1 como en column_name2 en un grupo. Consideremos un ejemplo en el que queremos contar el número de veces que cada empleado ha utilizado cada servicio de envío. Una vez más, utilizaremos la tabla Orders tabla. SELECT EmployeeID, ShipperID, COUNT(*) FROM Orders Group BY EmployeeID, ShipperID Order BY ShipperID, Count(*) DESC RESULTADO Number of Records: 26 EmployeeIDShipperIDCOUNT(*) 4112 118 217 317 617 …….…….……. Esta consulta podría utilizarse, por ejemplo, para obtener opiniones sobre el servicio de atención al cliente de los cargadores por parte de los empleados que han utilizado ese servicio. Como podemos ver arriba, ¡hay 26 pares de interacción únicos entre empleados y transportistas! ¿Cómo funciona entre bastidores la agrupación por dos columnas? Las filas con el mismo EmployeeID y ShipperID se emparejan en un grupo. El tamaño de esos grupos (es decir, el número de registros en el grupo) se calcula, como puede ver a continuación: EmployeeIDShipperIDCount 11 11 1112 11 11 …………. 41 41 418 41 41 …………. El comando GROUP BY es también una poderosa herramienta que puede combinarse con las cláusulas SQL HAVING y WHERE para definir condiciones adicionales para los resultados devueltos. Tenga en cuenta que hay ciertas sutilezas cuando se utiliza GROUP BY con columnas que tienen NULL valores. Consulte nuestro artículo anterior sobre los errores comunes de GROUP BY para obtener algunos detalles adicionales. Dominio de SQL GROUP BY No hace falta decir que sólo la práctica le hará dominar este comando. La práctica se realiza mejor en conjuntos de datos del mundo real, donde se puede visualizar y relacionar con las necesidades del negocio. El curso SQL para principiantes curso incluye un amplio conjunto de ejercicios interactivos. Aprenderá a agrupar filas y a calcular estadísticas con funciones de agregación en conjuntos de datos prácticos. Pruébalo, ¡y buena suerte! Tags: SQL aprender SQL agrupar por