Calculer la Moyenne en SQL
| |

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 !

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).

sql langage

Ainsi, elle simplifie l’analyse des données en fournissant une mesure centrale fiable et facile à interpréter.

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é.

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.

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 » :

IDNomSecteurVilleDate première commandeCoût total achatsNombre commandesArticles commandésDélai moyen livraison (jours)Note satisfaction (1-5)
1MateriauxProBTPLyon2020-03-15125 000,50 €421 25034
2ElectroPlusElectroniqueParis2019-11-2287 650,75 €2898053
3TextileUnionTextileMarseille2021-05-30234 500,00 €653 56075
4AgroAlimentAlimentationToulouse2022-01-1054 320,25 €1542024
5TechImportInformatiqueLille2020-07-18187 600,40 €371 12542
6BoisQualiteMenuiserieBordeaux2021-09-0598 700,00 €2376063
7ChimieLabChimieStrasbourg2019-12-12345 200,30 €512 45084
8MetalExpertMetallurgieNantes2022-03-0176 500,60 €1958035

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);
SELECT AVG(cout_total_achats) AS cout_moyen_fournisseurs
FROM fournisseurs;

cout_moyen_fournisseurs : 144808.85

SELECT AVG(articles_commandes) AS moyenne_articles_commandes
FROM fournisseurs;

moyenne_articles_commandes : 1365.625

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;

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;
Secteurcout_moyen_par_secteur
BTP125000.50
Electronique87650.75
Textile234500.00

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;
Secteurnote_moyenne
BTP4.0
Textile5.0

💡🎯 Lire aussi : Comment créer une table SQL (sql create table) ?

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

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

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;
Nomsecteurcout_total_achatsmoyenne_du_secteur
MateriauxProBTP125000.50125000.50
TextileUnionTextile234500.00234500.00

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);
Nomcout_total_achats
TextileUnion234500.00
ChimieLab345200.30

💡🎯 Lire aussi : Minification JavaScript : fonctionnement, outils et méthodes

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;
Secteurnote_arrondie
BTP4
Electronique3

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;
Secteurnb_fournisseursmoyenne_achatsnote_minnote_max
BTP1125000.5044
Electronique187650.7533

Auteur/autrice

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.