Diferencia entre Dónde y Agrupar por

Requisito previo: cláusula WHERE , GROUP BY , cláusula Have vs Where Las cláusulas
Where y Group By se utilizan para filtrar las filas devueltas por la consulta en función de la condición. Las diferencias son las siguientes a continuación.

La cláusula WHERE especifica las condiciones de búsqueda para las filas devueltas por Query y limita las filas a un conjunto de filas específico. Si una tabla tiene una gran cantidad de registros y si alguien quiere obtener los registros en particular, es útil usar la cláusula ‘where’.

La cláusula GROUP BY resume filas idénticas en un grupo único/distinto y devuelve una sola fila con el resumen de cada grupo, mediante el uso de la función Agregada adecuada en la lista SELECT, como COUNT(), SUM(), MIN(), MAX() , PROMEDIO(), etc

Caso de uso:
Supongamos que una empresa de ventas desea obtener una lista de los Clientes que compraron cierta cantidad de artículos el año pasado, para poder venderles más cosas este año.
Hay una tabla llamada SalesOrder con columnas CustomerId, SalesOrderId, Order_Date, OrderNumber, OrderItem, UnitPrice, OrderQty
Ahora necesitamos obtener los clientes que hicieron pedidos el año pasado, es decir, 2017

Uso de la cláusula Where –

SELECT * 
FROM [Sales].[Orders]
WHERE Order_Date >= '2017-01-01 00:00:00.000'
AND Order_Date < '2018-01-01 00:00:00.000' 

Esto devolverá el conjunto de filas con todos los Clientes y los Pedidos correspondientes del año 2017.

Uso de la cláusula Group By –

SELECT CustomerID, COUNT(*) AS OrderNumbers
FROM [Sales].[Orders]
WHERE Order_Date >= '2017-01-01 00:00:00.000'
AND Order_Date < '2018-01-01 00:00:00.000'
GROUP BY CustomerId 

Esto devolverá el conjunto de filas de los Clientes (CustomerId) que realizaron pedidos en el año 2017 y el recuento total de pedidos realizados por cada Cliente.

Uso de la cláusula Tener:
la cláusula Tener se usa para filtrar valores en la cláusula Agrupar por. La siguiente consulta filtra algunas de las filas

SELECT SalesOrderID,
         SUM(UnitPrice* OrderQty) AS TotalPrice
FROM     Sales.SalesOrderDetail
GROUP BY SalesOrderID
HAVING   TotalPrice > 5000 

Dado que la visibilidad de la cláusula WHERE es una fila a la vez, no hay forma de que evalúe el SUM en todos los SalesOrderID. La cláusula HAVING se evalúa después de crear la agrupación.

También puede usar la cláusula ‘Dónde’ con la cláusula ‘Tener’. La cláusula WHERE se aplica primero a las filas individuales de las tablas. Solo se agrupan las filas que cumplen las condiciones de la cláusula WHERE. A continuación, se aplica la cláusula HAVING a las filas del conjunto de resultados.

Ejemplo:

SELECT SalesOrderID,
         SUM(UnitPrice * OrderQty) AS TotalPrice
FROM     Sales.SalesOrderDetail
WHERE    SalesOrderID > 500
GROUP BY SalesOrderID
HAVING   SUM(UnitPrice * OrderQty) > 10000 

Así que aquí, la cláusula que tiene se aplicará en las filas que están filtradas por la cláusula where. Tener una cláusula solo puede comparar resultados de funciones agregadas o parte de la columna del grupo.

Conclusión:

  1. WHERE se utiliza para filtrar registros antes de que se realicen agrupaciones en filas individuales .
  2. GROUP BY agrega/agrupa las filas y devuelve el resumen de cada grupo .
  3. HAVING se usa para filtrar valores después de que hayan sido grupos .

Publicación traducida automáticamente

Artículo escrito por Miteshree y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *