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.
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 |
---|---|
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 AdventureWorks2008R2;
GO
SELECT AVG(VacationHours)AS 'Average vacation hours',
SUM (SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle 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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
GO
SELECT AVG(ListPrice)
FROM Production.Product;
Voici l'ensemble des résultats.
------------------------------
438.6662
(1 ligne(s) affectée(s))