Condividi tramite


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 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)