Puede haber muchas columnas en una tabla de base de datos, por lo que a veces puede resultar difícil y demorado encontrar el mismo tipo de datos en estas columnas. La declaración GROUP BY agrupa las filas idénticas presentes en las columnas de una tabla. La declaración GROUP BY junto con las funciones agregadas de SQL (COUNT(), MAX(), MIN(), SUM(), AVG(), etc.) nos ayudan a analizar los datos de manera eficiente.
Ahora, entendamos esto con un ejemplo.
Antes de comenzar, debemos tener en cuenta algunos puntos importantes:
- Todos los datos que no se enumeran como parámetros para GROUP BY necesitan que se les aplique una función de agregación.
- Si ejecuta este comando SQL, verá un error porque la base de datos no sabe qué hacer con el estado. Solo hay una ciudad por grupo pero hay muchos estados. Todos ellos no se pueden generar como un valor sin ninguna función de agregación.
- No podemos usar la cláusula WHERE después de la cláusula GROUP BY. En ese caso, usamos la cláusula HAVING .
- Para mostrar registros en un orden específico (ascendente o descendente) podemos usar la cláusula ORDER BY . Pero usarlo no es necesario.
Sintaxis:
SELECT column1, column2..., Aggregate(column3, column4,..) FROM Table_name WHERE Condition... //OPTION-1 (depending on the condition) GROUP BY column1,column2,.. HAVING Condition... //OPTION-2 (depending on the condition) ORDER BY column1,column2,.. DESC(if required);
Aquí usamos Microsoft SQL Server para ejecutar consultas.
Paso 1: Creación de la base de datos
Para esto, use el siguiente comando para crear una base de datos llamada Ventas.
Consulta:
CREATE DATABASE Sales;
Paso 2: Uso de la base de datos
Utilice la siguiente instrucción SQL para cambiar el contexto de la base de datos a Ventas:
Consulta:
USE Sales;
Paso 3: Definición de la tabla
Vamos a utilizar la siguiente tabla Sales_Order en nuestra base de datos de Ventas.
Consulta:
Create Table Sales_Order (ORDERNO VARCHAR(20) Primary Key, ClientNo VARCHAR(20), Orderdate DATE, SALESMANNO VARCHAR(20), Orderstatus VARCHAR(30)0;
Puede usar la siguiente declaración para consultar la descripción de la tabla creada:
Consulta:
EXEC SP_COLUMNS Sales_Order;
Producción:
Paso 4: agregar datos a la tabla
Use la siguiente declaración para agregar datos a la tabla Sales_Order :
Consulta:
INSERT INTO Sales_Order VALUES ('O19001', 'C00001', '2007-10-03', 'S00001', 'In Process'); INSERT INTO Sales_Order VALUES('O19002', 'C00002', '2007-11-01', 'S00002', 'Cancelled'); INSERT INTO Sales_Order VALUES('O19003', 'C00003', '2007-9-05', 'S00003', 'Fulfilled'); INSERT INTO Sales_Order VALUES('O19004', 'C00004', '2007-6-06', 'S00004', 'Fulfilled'); INSERT INTO Sales_Order VALUES('O19005', 'C00005', '2007-8-02', 'S00005', 'Cancelled'); INSERT INTO Sales_Order VALUES('O19006', 'C00006', '2007-8-01', 'S00006', 'In Process');
Paso 5: Ver los datos insertados
Consulta:
SELECT * FROM Sales_Order;
Paso 6: Supongamos que queremos averiguar el número de cliente de los clientes cuyas órdenes están en proceso.
Para hacer esto usaremos la función COUNT() :
Consulta:
SELECT CLIENTNO, COUNT(ORDERSTATUS) AS Order_In_Process from Sales_Order WHERE ORDERSTATUS='In Process' GROUP BY CLIENTNO;
Ejecute este comando en su máquina y vea el resultado.
Producción:
Entonces, a partir de esta salida, podemos decir fácilmente que C00001 y C00006 tienen 1 pedido aún en proceso .
Ejemplo 2:
Ahora, cree otra tabla llamada ORDERED por su cuenta siguiendo los mismos pasos que antes. Puede dar a la base de datos el nombre que desee. La descripción de la tabla sería así:
Consulta:
Create Table Ordered place VARCHAR(30), product VARCHAR(30), price DECIMAL);
Ahora inserte los datos de la siguiente manera:
Esta vez queremos saber la cantidad total de dinero ganado en ambos lugares.
Para hacer esto usaremos la función SUM() :
Consulta:
SELECT place, SUM(price) FROM ORDERED GROUP BY place;
Producción:
Ahora, con solo mirar la salida, podemos saber desde qué lugar estamos ganando más dinero en lugar de pasar por cada fila.
Puede intentar usar las funciones de agregado AVG(), MIN(), MAX() con GROUP BY y realizar diferentes tipos de consultas como estas.