Calculer la Moyenne en SQL (Fonction AVG) : guide complet pour débutants
SQL (Structured Query Language) est un langage indispensable pour les développeurs et les webmasters, permettant de gérer et d’interagir avec des bases de données de manière efficace.
Que ce soit pour créer des sites web dynamiques, analyser des données utilisateurs ou gérer des systèmes de gestion de contenu (CMS), SQL est un outil incontournable. Parmi ses fonctions de base, la fonction AVG (pour Average) occupe une place importante.
Elle permet de calculer la moyenne d’un ensemble de valeurs numériques, comme les revenus mensuels, les notes d’un examen, les temps de réponse d’un serveur ou encore les prix moyens des produits dans un catalogue. Ce guide s’adresse aux débutants souhaitant maîtriser le calcul de la moyenne en SQL. Nous explorerons en détail la fonction AVG, ses utilisations pratiques et les meilleures pratiques pour l’appliquer efficacement dans vos requêtes. Découvrez dans cet article comment calculer la moyenne en SQL !
Moyenne en SQL : définition et utilités
1. Définition de « Moyenne en SQL »
En SQL, la moyenne représente une valeur numérique calculée à partir d’un ensemble de données. Elle s’obtient en divisant la somme de toutes les valeurs par leur nombre total.
La fonction AVG() réalise ce calcul automatiquement. Par exemple, dans une table contenant les salaires des employés, la moyenne donne une idée du salaire typique au sein de l’entreprise. Cette fonction s’applique uniquement aux colonnes numériques, comme les entiers ou les décimaux, et ignore automatiquement les valeurs nulles (NULL).

Ainsi, elle simplifie l’analyse des données en fournissant une mesure centrale fiable et facile à interpréter.
2. Les utilités pratiques de la Moyenne en SQL
La fonction AVG() trouve de nombreuses applications dans des contextes variés, aidant les développeurs et les analystes à tirer des insights précieux. Voici quelques exemples concrets :
▶️ Analyse des performances commerciales : dans une base de données de ventes, calculer la moyenne des montants des transactions permet d’évaluer le panier moyen des clients. Par exemple, une requête comme SELECT AVG(montant) FROM ventes; indique si les stratégies marketing ou les promotions influencent les achats.
▶️ Suivi des indicateurs de performance : pour un site web, la moyenne du temps de chargement des pages aide à identifier des problèmes techniques. Une requête telle que SELECT AVG(temps_chargement) FROM logs; révèle si le site répond aux normes de performance attendues.
▶️ Gestion des ressources humaines : dans une table des salaires, la moyenne des rémunérations donne une vision globale de la politique salariale. Par exemple, SELECT AVG(salaire) FROM employes WHERE departement = ‘Ventes’; permet de comparer les salaires entre départements.
▶️ Analyse académique : pour un établissement scolaire, calculer la moyenne des notes des étudiants aide à évaluer le niveau général. Une requête comme SELECT AVG(note) FROM examens WHERE matiere = ‘Mathématiques’; montre si des mesures supplémentaires sont nécessaires pour améliorer les résultats.
▶️ Suivi des stocks et des prix : dans un système de gestion d’inventaire, la moyenne des prix des produits permet de fixer des tarifs compétitifs. Par exemple, SELECT AVG(prix) FROM produits WHERE categorie = ‘Electronique’; aide à comprendre les tendances du marché.
Quelle fonction pour calculer la Moyenne en SQL ?
La fonction SQL AVG() calcule la moyenne arithmétique des valeurs d’une colonne numérique. Elle s’utilise couramment pour obtenir des statistiques descriptives sur des ensembles de données. Elle fonctionne de la manière suivante : AVG() additionne toutes les valeurs non-NULL de la colonne cible, puis divise ce total par le nombre d’éléments pris en compte. La syntaxe de base suit ce modèle :
SELECT AVG(nom_colonne) FROM table;
Contrairement à une simple division SUM()/COUNT(), AVG() gère automatiquement les valeurs nulles en les excluant du calcul. La fonction accepte différents types numériques (INT, FLOAT, DECIMAL) et conserve le type d’origine dans le résultat.
Pour des calculs précis, on combine souvent AVG() avec des clauses :
- WHERE pour filtrer les lignes
- GROUP BY pour des moyennes par catégorie
- ROUND() pour arrondir le résultat
Exemple pratique :
SELECT département, ROUND(AVG(salaire), 2) as salaire_moyen
FROM employés
WHERE statut = 'CDI'
GROUP BY département;
Cette requête retourne le salaire moyen arrondi à deux décimales pour chaque département, uniquement sur les employés en CDI. La fonction AVG() s’intègre ainsi parfaitement dans des analyses statistiques complexes tout en restant simple d’utilisation.
SQL AVG() : exemples concrets
La meilleure façon de comprendre le fonctionnement de la fonction SQL AVG() est de l’utiliser dans une application concrète. Imaginons une table nommée « Fournisseurs » :
ID | Nom | Secteur | Ville | Date première commande | Coût total achats | Nombre commandes | Articles commandés | Délai moyen livraison (jours) | Note satisfaction (1-5) |
1 | MateriauxPro | BTP | Lyon | 2020-03-15 | 125 000,50 € | 42 | 1 250 | 3 | 4 |
2 | ElectroPlus | Electronique | Paris | 2019-11-22 | 87 650,75 € | 28 | 980 | 5 | 3 |
3 | TextileUnion | Textile | Marseille | 2021-05-30 | 234 500,00 € | 65 | 3 560 | 7 | 5 |
4 | AgroAliment | Alimentation | Toulouse | 2022-01-10 | 54 320,25 € | 15 | 420 | 2 | 4 |
5 | TechImport | Informatique | Lille | 2020-07-18 | 187 600,40 € | 37 | 1 125 | 4 | 2 |
6 | BoisQualite | Menuiserie | Bordeaux | 2021-09-05 | 98 700,00 € | 23 | 760 | 6 | 3 |
7 | ChimieLab | Chimie | Strasbourg | 2019-12-12 | 345 200,30 € | 51 | 2 450 | 8 | 4 |
8 | MetalExpert | Metallurgie | Nantes | 2022-03-01 | 76 500,60 € | 19 | 580 | 3 | 5 |
Table fournisseurs
CREATE TABLE fournisseurs (
id INT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
secteur VARCHAR(50),
ville VARCHAR(50),
date_premiere_commande DATE,
cout_total_achats DECIMAL(10,2),
nombre_commandes INT,
articles_commandes INT,
delai_moyen_livraison INT,
note_satisfaction INT CHECK (note_satisfaction BETWEEN 1 AND 5)
);
INSERT INTO fournisseurs VALUES
(1, 'MateriauxPro', 'BTP', 'Lyon', '2020-03-15', 125000.50, 42, 1250, 3, 4),
(2, 'ElectroPlus', 'Electronique', 'Paris', '2019-11-22', 87650.75, 28, 980, 5, 3),
(3, 'TextileUnion', 'Textile', 'Marseille', '2021-05-30', 234500.00, 65, 3560, 7, 5),
(4, 'AgroAliment', 'Alimentation', 'Toulouse', '2022-01-10', 54320.25, 15, 420, 2, 4),
(5, 'TechImport', 'Informatique', 'Lille', '2020-07-18', 187600.40, 37, 1125, 4, 2),
(6, 'BoisQualite', 'Menuiserie', 'Bordeaux', '2021-09-05', 98700.00, 23, 760, 6, 3),
(7, 'ChimieLab', 'Chimie', 'Strasbourg', '2019-12-12', 345200.30, 51, 2450, 8, 4),
(8, 'MetalExpert', 'Metallurgie', 'Nantes', '2022-03-01', 76500.60, 19, 580, 3, 5);
1. Coût total moyen des fournisseurs
SELECT AVG(cout_total_achats) AS cout_moyen_fournisseurs
FROM fournisseurs;
cout_moyen_fournisseurs : 144808.85
2. Nombre moyen d’articles commandés par fournisseur
SELECT AVG(articles_commandes) AS moyenne_articles_commandes
FROM fournisseurs;
moyenne_articles_commandes : 1365.625
3. Autres calculs pertinents
Délai moyen de livraison : 4.75 jours
SELECT AVG(delai_moyen_livraison) AS delai_moyen_jours
FROM fournisseurs;
Note de satisfaction moyenne : 3.75
SELECT ROUND(AVG(note_satisfaction), 2) AS note_moyenne_satisfaction
FROM fournisseurs;
Coût moyen par commande : 3556.82
SELECT AVG(cout_total_achats/nombre_commandes) AS cout_moyen_par_commande
FROM fournisseurs;
La Fonction AVG() en SQL : Combinaisons avancées et paramètres
1. AVG() avec GROUP BY : Moyenne par Groupe
GROUP BY permet de calculer la moyenne pour chaque groupe de données défini par une colonne (ex : par secteur, par ville, etc.).
Exemple : Calculer le coût moyen des achats par secteur :
SELECT
secteur,
ROUND(AVG(cout_total_achats), 2) AS cout_moyen_par_secteur
FROM fournisseurs
GROUP BY secteur;
Secteur | cout_moyen_par_secteur |
BTP | 125000.50 |
Electronique | 87650.75 |
Textile | 234500.00 |
2. AVG() avec HAVING : Filtrage des Moyennes
HAVING
filtre les résultats après agrégation (contrairement à WHERE
qui filtre avant). On l’utilise pour ne garder que les moyennes vérifiant une condition.
Exemple : Trouver les secteurs dont la note moyenne est supérieure à 3.5 :
SELECT
secteur,
AVG(note_satisfaction) AS note_moyenne
FROM fournisseurs
GROUP BY secteur
HAVING AVG(note_satisfaction) > 3.5;
Secteur | note_moyenne |
BTP | 4.0 |
Textile | 5.0 |
💡🎯 Lire aussi : Comment créer une table SQL (sql create table) ?
3. AVG() avec WHERE : filtrage avant calcul
WHERE permet de calculer la moyenne uniquement sur un sous-ensemble de données.
Exemple : Calculer la moyenne des achats hors Paris
SELECT
AVG(cout_total_achats) AS moyenne_hors_paris
FROM fournisseurs
WHERE ville != 'Paris';
moyenne_hors_paris : 152417.32
4. AVG() avec DISTINCT : Moyenne des Valeurs Uniques
DISTINCT élimine les doublons avant calcul, utile pour éviter les biais si des valeurs se répètent.
Exemple : Calculer la moyenne des notes de satisfaction uniques
SELECT
AVG(DISTINCT note_satisfaction) AS moyenne_notes_uniques
FROM fournisseurs;
moyenne_notes_uniques : 3.6
5. AVG() avec OVER() : Calcul fenêtré
OVER() permet de calculer une moyenne sur un ensemble de lignes défini (ex : par secteur, sans utiliser GROUP BY).
Exemple : Afficher chaque fournisseur avec son coût et la moyenne de son secteur :
SELECT
nom,
secteur,
cout_total_achats,
AVG(cout_total_achats) OVER(PARTITION BY secteur) AS moyenne_du_secteur
FROM fournisseurs;
Nom | secteur | cout_total_achats | moyenne_du_secteur |
MateriauxPro | BTP | 125000.50 | 125000.50 |
TextileUnion | Textile | 234500.00 | 234500.00 |
6. AVG() dans une Sous-Requête
On peut utiliser AVG() dans une sous-requête pour comparer des valeurs individuelles à la moyenne globale.
Exemple : Trouver les fournisseurs dont le coût dépasse la moyenne générale :
SELECT
nom,
cout_total_achats
FROM fournisseurs
WHERE cout_total_achats > (SELECT AVG(cout_total_achats) FROM fournisseurs);
Nom | cout_total_achats |
TextileUnion | 234500.00 |
ChimieLab | 345200.30 |
💡🎯 Lire aussi : Minification JavaScript : fonctionnement, outils et méthodes
7. AVG() avec ROUND et CAST : formatage des Résultats
On peut arrondir (ROUND) ou convertir (CAST) le résultat pour un affichage plus propre.
Exemple : Arrondir la note moyenne à l’entier le plus proche
SELECT
secteur,
CAST(ROUND(AVG(note_satisfaction), 0) AS INT) AS note_arrondie
FROM fournisseurs
GROUP BY secteur;
Secteur | note_arrondie |
BTP | 4 |
Electronique | 3 |
8. AVG() avec d’Autres Fonctions d’Agrégation
On peut combiner AVG() avec COUNT, MIN, MAX, etc., pour des analyses plus complètes.
Exemple : Obtenir une analyse complète par secteur
SELECT
secteur,
COUNT(*) AS nb_fournisseurs,
AVG(cout_total_achats) AS moyenne_achats,
MIN(note_satisfaction) AS note_min,
MAX(note_satisfaction) AS note_max
FROM fournisseurs
GROUP BY secteur;
Secteur | nb_fournisseurs | moyenne_achats | note_min | note_max |
BTP | 1 | 125000.50 | 4 | 4 |
Electronique | 1 | 87650.75 | 3 | 3 |