CodeGym /Cours /SQL SELF /Moyennes avec AVG() — calcul des moyennes s...

Moyennes avec AVG() — calcul des moyennes sur les colonnes

SQL SELF
Niveau 7 , Leçon 3
Disponible

Si t'as déjà essayé de calculer la moyenne des notes d'exam ou, genre, le salaire moyen dans un service, tu connais déjà le concept de moyenne arithmétique. Franchement, on apprend ça dès l'école. En SQL, tout ce qui touche au calcul de la moyenne dans un dataset, c'est la fonction AVG() qui s'en occupe.

La fonction AVG() c'est une fonction d'agrégation qui calcule la moyenne arithmétique d'une colonne numérique. Elle additionne toutes les valeurs de la colonne indiquée et divise le résultat par le nombre de ces valeurs. Elle ne fait pas attention aux NULL (et ce petit détail, bizarrement, nous simplifie la vie, mais on en reparle après).

Syntaxe de AVG()

On commence par la syntaxe de base :

SELECT AVG(colonne)
FROM table;

À noter : ici colonne c'est la colonne avec les valeurs numériques dont tu veux la moyenne.

Exemple 1 : Salaire moyen des employés

Imagine qu'on a une table employees avec les infos sur les employés et leurs salaires :

id name salary
1 Otto 50000
2 Maria 60000
3 Alex 55000
4 Anna NULL
5 Dan 52000

Une requête simple pour calculer le salaire moyen :

SELECT AVG(salary) AS average_salary
FROM employees;

Résultat :

average_salary
54250

Comment ça marche ?

  • AVG() additionne tous les salaires : 50000 + 60000 + 55000 + 52000 = 217000.
  • Elle divise la somme par le nombre de valeurs non nulles : 217000 / 4 = 54250.

Particularités de AVG() avec NULL

T'as sûrement remarqué que pour calculer la moyenne des salaires, la valeur NULL dans la colonne salary a été ignorée. C'est une feature clé de AVG(). Elle ne prend en compte que les valeurs non NULL.

Essayons un exemple :

SELECT AVG(NULL) AS result;

Résultat :

result
NULL

Encore une fois, ça montre que AVG() ignore les NULL. Mais si tout le dataset est composé de NULL, alors le résultat sera NULL.

Mais si dans la table on a 0 au lieu de NULL, ce résultat ne sera pas ignoré.

Table employees

id salary
1 1000
2 0
3 NULL
4 2000

Requête SQL :

SELECT AVG(salary) AS avg_salary
FROM employees;

Résultat :

avg_salary
1000

Pourquoi ?

Parce que AVG() va calculer :

[(1000 + 0 + 2000) / 3 = 1000]

La ligne avec NULL est ignorée dans le calcul de la moyenne.

Exemple : Calcul de l'âge moyen des étudiants

Regardons maintenant la table students :

id name age
1 Anna 20
2 Max 22
3 Maria NULL
4 Otto 21

Requête :

SELECT AVG(age) AS average_age
FROM students;

Résultat :

average_age
21
  • AVG() ignore l'étudiante Maria, car son âge est NULL.
  • La moyenne est calculée comme : (20 + 22 + 21) / 3 = 21.

Arrondir le résultat

Parfois, le résultat de AVG() donne un nombre à virgule avec plusieurs décimales.

Si tu veux un nombre arrondi, utilise la fonction ROUND().

Table employees

id salary
1 50000
2 60000
3 47000
4 NULL

Requête SQL

SELECT ROUND(AVG(salary), 2) AS rounded_average_salary
FROM employees;

Résultat

rounded_average_salary
52333.33

La ligne avec NULL est exclue du calcul, donc la moyenne est faite sur trois valeurs.

Filtrer les données avant de calculer AVG()

Si tu veux calculer la moyenne, mais seulement pour les valeurs qui remplissent certaines conditions, utilise WHERE.

Table employees

id salary
1 50000
2 60000
3 47000
4 60000
5 NULL

Exemple : Trouvons le salaire moyen des employés dont id > 2.

SELECT AVG(salary) AS average_salary
FROM employees
WHERE id > 2;

Résultat

average_salary
53500

Dans le calcul, il n'y a que les salaires avec id = 3 et id = 4. La ligne avec NULL est exclue.

Exemple : Requêtes complexes avec AVG()

On peut combiner la fonction AVG() avec d'autres fonctions d'agrégation et opérateurs.

Par exemple, on a une table des ventes sales :

sale_id product quantity price
1 Téléphone 2 500
2 Ordinateur portable 1 1500
3 Tablette 3 300

Requête pour calculer la moyenne du total des ventes :

SELECT AVG(quantity * price) AS average_total_sale
FROM sales;

Résultat :

averagetotalsale
950

Tips de la vraie vie et erreurs classiques

Faut faire gaffe avec AVG() pour éviter les erreurs classiques :

Valeurs NULL : parfois tu te demandes pourquoi le résultat est plus bas que prévu. Rappelle-toi que AVG() saute les lignes avec NULL.

Mélange de types de données : si dans la colonne t'as des nombres et du texte (mauvaise pratique, clairement), AVG() va planter.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION