AVG (Transact-SQL)
Restituisce la media dei valori di un gruppo. I valori Null vengono ignorati. Può precedere la clausola OVER.
Convenzioni della sintassi Transact-SQL
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 subquery.
Tipi restituiti
Il tipo restituito dipende dal tipo del risultato di expression.
Risultato dell'espressione | Tipo restituito |
---|---|
Categoria integer |
int |
Categoria decimal (p, s) |
decimal(38, s) diviso per decimal(10, 0) |
Categoria money e smallmoney |
money |
Categoria float e real |
float |
![]() |
---|
Le funzioni di aggregazione Distinct, ad esempio AVG(DISTINCT column_name), COUNT(DISTINCT column_name), MAX(DISTINCT column_name), MIN(DISTINCT column_name) e SUM(DISTINCT column_name), non sono supportate con CUBE o ROLLUP. Se si utilizzano tali operatori, Motore di database di SQL Server 2005 restituisce un messaggio di errore e la query viene annullata. |
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 alzato di livello e non del tipo alias.
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 AdventureWorks;
GO
SELECT AVG(VacationHours)as 'Average vacation hours',
SUM (SickLeaveHours) as 'Total sick leave hours'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%';
Set di risultati:
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
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 AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) '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 AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Set di risultati:
------------------------------
437.4042
(1 row(s) affected)
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 AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;
Set di risultati:
------------------------------
438.6662
(1 row(s) affected)
Vedere anche
Riferimento
Funzioni di aggregazione (Transact-SQL)
Clausola OVER (Transact-SQL)