Microsoft SQL Server Usando las funciones de agregación con OVER


Ejemplo

Usando la tabla de autos , calcularemos la cantidad total, máxima, mínima y promedio de dinero que gastó cada cliente y muchas veces (COUNT) que ella trajo un auto para reparación.

Id CustomerId MechanicId Modelo Estado Costo Total

SELECT CustomerId,  
       SUM(TotalCost) OVER(PARTITION BY CustomerId) AS Total,
       AVG(TotalCost) OVER(PARTITION BY CustomerId) AS Avg,
       COUNT(TotalCost) OVER(PARTITION BY CustomerId) AS Count,
       MIN(TotalCost) OVER(PARTITION BY CustomerId) AS Min,
       MAX(TotalCost) OVER(PARTITION BY CustomerId) AS Max
  FROM CarsTable
 WHERE Status = 'READY'

Tenga en cuenta que usar OVER de esta manera no agregará las filas devueltas. La consulta anterior devolverá lo siguiente:

Identificación del cliente Total Avg Contar Min Max
1 430 215 2 200 230
1 430 215 2 200 230

La fila (s) duplicada (s) puede no ser tan útil para propósitos de reporte.

Si desea simplemente agregar datos, será mejor que use la cláusula GROUP BY junto con las funciones agregadas apropiadas, por ejemplo:

SELECT CustomerId,  
       SUM(TotalCost) AS Total,
       AVG(TotalCost) AS Avg,
       COUNT(TotalCost) AS Count,
       MIN(TotalCost) AS Min,
       MAX(TotalCost)  AS Max
  FROM CarsTable
 WHERE Status = 'READY'
GROUP BY CustomerId