AVG (Transact-SQL)
Restituisce la media dei valori di un gruppo. I valori Null vengono ignorati. Può precedere la clausola OVER.
Sintassi
AVG ( [ ALL | DISTINCT ] expression )
Argomenti
ALL
Applica la funzione di aggregazione a tutti i valori. Il valore predefinito è ALL.DISTINCT
Indica che la funzione AVG deve essere eseguita solo in ogni istanza univoca di un valore, indipendentemente dal numero di occorrenze del valore.expression
Espressione di un tipo di dati della categoria numerici esatti o numerici approssimati, con l'eccezione del tipo di dati bit. Non sono consentite funzioni di aggregazione e sottoquery.
Tipi restituiti
Il tipo restituito dipende dal tipo del risultato di expression.
Risultato dell'espressione |
Tipo restituito |
---|---|
tinyint |
int |
smallint |
int |
int |
int |
bigint |
bigint |
Categoria decimal (p, s) |
decimal(38, s) diviso per decimal(10, 0) |
Categorie money e smallmoney |
money |
Categorie float e real |
float |
Osservazioni
Se expression è di un tipo di dati alias, anche il tipo restituito è di tipo alias. Tuttavia, se il tipo di dati di base del tipo alias viene alzato di livello, ad esempio da tinyint a int, il valore restituito è del tipo di dati promosso e non del tipo alias.
AVG () calcola la media di un set di valori dividendo la somma di tali valori per il numero di valori non Null. Se la somma supera il valore massimo per il tipo di dati del valore restituito, verrà restituito un errore.
Esempi
A. Utilizzo delle funzioni SUM e AVG per l'esecuzione di calcoli
Nell'esempio seguente viene calcolata la media delle ore di ferie e la somma delle ore di malattia utilizzate dai vicepresidenti Adventure Works Cycles. Ogni funzione di aggregazione restituisce un singolo valore di riepilogo per tutte le righe recuperate.
USE AdventureWorks2008R2;
GO
SELECT AVG(VacationHours)AS 'Average vacation hours',
SUM (SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';
Set di risultati:
Media delle ore di ferie Ore di assenza per malattia totali
---------------------- ----------------------
25 97
(Righe interessate: 1)
B. Utilizzo delle funzioni SUM e AVG con una clausola GROUP BY
Ogni funzione di aggregazione, se utilizzata con la clausola GROUP BY, restituisce un singolo valore per ogni gruppo anziché per l'intera tabella. Nell'esempio seguente vengono restituiti i valori di riepilogo per ogni area di vendita. Nel riepilogo viene elencata la media dei premi di produttività ricevuti dai venditori in ogni area e la somma delle vendite da inizio anno per ogni area.
USE AdventureWorks2008R2;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
C. Utilizzo di AVG con DISTINCT
Nell'istruzione seguente viene restituito il prezzo medio di listino dei prodotti.
USE AdventureWorks2008R2;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Set di risultati:
------------------------------
437.4042
(Righe interessate: 1)
D. Utilizzo della funzione AVG senza DISTINCT
Senza DISTINCT, la AVG trova il prezzo medio di listino di tutti i prodotti nella tabella Product.
USE AdventureWorks2008R2;
GO
SELECT AVG(ListPrice)
FROM Production.Product;
Set di risultati:
------------------------------
438.6662
(Righe interessate: 1)