Microsoft SQL Server Utilizzo delle funzioni di aggregazione con OVER

Esempio

Usando la tabella Cars , calcoleremo l'importo totale, massimo, minimo e medio di denaro speso da ogni cliente e molte volte (COUNT) ha portato una macchina per ripararla.

Id CustomerId MechanicId Status Status Costo totale

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'

Fai attenzione che l'utilizzo di OVER in questo modo non aggregherà le righe restituite. La query sopra riportata restituirà quanto segue:

Identificativo del cliente Totale Avg Contare min Max
1 430 215 2 200 230
1 430 215 2 200 230

La / e riga / e duplicata / i potrebbe non essere quella utile ai fini della segnalazione.

Se si desidera semplicemente aggregare i dati, sarà meglio utilizzare la clausola GROUP BY insieme alle funzioni aggregate appropriate. Ad esempio:

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