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.
Conventions 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 |
Important : |
---|
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)