AVG (Transact-SQL)

Retourne la moyenne des valeurs d'un groupe. Les valeurs NULL sont ignorées. Cette fonction peut être suivie par la clause OVER.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

AVG ( [ ALL | DISTINCT ] expression ) 

Arguments

  • ALL
    Applique la fonction d'agrégation à toutes les valeurs. ALL est l'argument par défaut.

  • DISTINCT
    Spécifie que la fonction AVG doit uniquement être appliquée à chaque instance unique d'une valeur, quel que soit le nombre d'occurrences de la valeur.

  • expression
    expression de la catégorie de type de données valeur numérique exacte ou approchée, sauf pour le type de données bit. Les fonctions d'agrégation et les sous-requêtes ne sont pas autorisées.

Type de retour

Le type de retour est déterminé par le type du résultat de expression.

Résultat de l'expression

Type de la valeur renvoyée

tinyint

int

smallint

int

int

int

bigint

bigint

catégorie decimal (p, s)

decimal(38, s) divisé par decimal(10, 0)

catégorie money et smallmoney

money

catégorie float et real

float

Notes

Si le type de données de expression est un alias, le type de retour est également un alias. Cependant, si le type de données de base du type d'alias est promu, par exemple de tinyint à int, la valeur retournée est celle du type de données promues et non celle du type de données d'alias.

AVG() calcule la moyenne d'un jeu de valeurs en divisant la somme de ces valeurs par le nombre de valeurs non nulles. Si la somme dépasse la valeur maximale pour le type de données de la valeur de retour, une erreur est renvoyée.

Exemples

A. Utilisation des fonctions SUM et AVG pour des calculs

L'exemple suivant calcule la moyenne des heures de congés ainsi que la somme des heures de congés maladie utilisées par les vice-présidents de Adventure Works Cycles. Chacune de ces fonctions d'agrégation produit une valeur de résumé unique pour toutes les lignes récupérées.

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%';

Voici l'ensemble des résultats.

Moyenne des heures de congés Nombre total d'heures de congé de maladie

---------------------- ----------------------

25 97

(1 ligne(s) affectée(s))

B. Utilisation des fonctions SUM et AVG avec une clause GROUP BY

Lorsqu'elle est utilisée avec une clause GROUP BY, chaque fonction d'agrégation produit une valeur unique pour chaque groupe, plutôt que pour la totalité de la table. L'exemple suivant produit des valeurs de résumé pour chaque secteur géographique de ventes. Le résumé répertorie la moyenne des bonus reçus par les vendeurs dans chaque secteur, ainsi que la somme des ventes annuelles à ce jour pour chaque secteur.

USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)AS 'Average bonus', SUM(SalesYTD) AS 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO

C. Utilisation de la fonction AVG avec DISTINCT

L'instruction suivante retourne les tarifs moyens des produits.

USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

Voici l'ensemble des résultats.

------------------------------

437.4042

(1 ligne(s) affectée(s))

D. Utilisation de la fonction AVG sans DISTINCT

Sans l'option DISTINCT, la fonction AVG recherche le tarif moyen de tous les produits dans la table Product.

USE AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

Voici l'ensemble des résultats.

------------------------------

438.6662

(1 ligne(s) affectée(s))