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 retour

catégorie d'entiers

int

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

ms177677.note(fr-fr,SQL.90).gifImportant :
Les fonctions d'agrégation de type DISTINCT, comme AVG(DISTINCT column_name), COUNT(DISTINCT column_name), MAX(DISTINCT column_name), MIN(DISTINCT column_name) et SUM(DISTINCT column_name), ne sont pas prises en charge lorsque vous utilisez CUBE ou ROLLUP. En cas d'utilisation, le Moteur de base de données SQL Server 2005 retourne un message d'erreur et annule la requête.

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.

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.

Average vacation hours       Total sick leave hours 
----------------------       ---------------------- 
25                           97

(1 row(s) affected)

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) '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 row(s) affected)
 

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 row(s) affected)

Voir aussi

Référence

Fonctions d'agrégation (Transact-SQL)
Clause OVER (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005