AVG (Transact-SQL)

Restituisce la media dei valori di un gruppo. I valori Null vengono ignorati. Può precedere la clausola OVER.

Icona di collegamento a un argomentoConvenzioni 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

ms177677.note(it-it,SQL.90).gifImportante:
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)

Guida in linea e informazioni

Assistenza su SQL Server 2005