Retour à la liste des articles Articles
10 minutes de lecture

Aperçu des fonctions d'agrégation en SQL

Les fonctions agrégées sont couramment utilisées en SQL. Cet article vous guidera dans leur utilisation et vous montrera des exemples de leur fonctionnement.

Les fonctions agrégées SQL sont un outil utile, notamment pour la création de rapports. Elles ne sont pas difficiles à comprendre, surtout si vous avez une certaine expérience d'Excel ou de programmes similaires. Vous avez probablement déjà utilisé des fonctions d'agrégation telles que SUM ou AVERAGE dans une feuille de calcul. Même si vous ne les utilisez qu'occasionnellement, la connaissance des fonctions d'agrégation peut vous aider à mieux comprendre vos données et à travailler plus efficacement.

Tout ce que je vais aborder dans cet article est expliqué plus en détail dans notre cours Création de rapports basiques en SQL , où vous pouvez également mettre en pratique toutes les fonctions que vous apprenez ici.

Que sont les fonctions d'agrégation SQL ?

En SQL, les fonctions agrégées effectuent un calcul sur plusieurs lignes et renvoient une seule valeur. Elles sont souvent utilisées dans l'instruction GROUP BY, mais elles peuvent également être utilisées sans cette instruction. Il existe cinq fonctions d'agrégation en SQL :

  • COUNT()
  • SUM()
  • AVG()
  • MIN()
  • MAX()

Je ne vais pas expliquer l'instruction GROUP BY ici. Ce n'est pas nécessaire, car nous avons déjà un excellent article sur le fonctionnement de GROUP BY. Si vous n'êtes pas familier avec GROUP BY, je vous suggère de lire cet article, puis de revenir ici.

Que fait chaque fonction d'agrégation ?

Les noms des fonctions ci-dessus sont explicites, du moins à mon avis. Vous avez peut-être déjà compris ce qu'elles font rien qu'en les regardant. Néanmoins, une brève explication ne vous fera pas de mal :

FunctionExplanationIgnores NULL values
COUNT()Counts the number of rows in a table
SUM()Calculates the sum of column values
AVG()Calculates the average column value
MIN()Returns the minimum value from a set of values
MAX()Returns the maximum value from a set of values

La table des ventes

Je vais utiliser une seule table pour vous montrer comment fonctionnent les fonctions d'agrégation. Elle s'appelle sales et se compose des attributs suivants :

  • id - L'ID du vendeur.
  • first_name - Le prénom du vendeur.
  • last_name - Le nom de famille du vendeur.
  • items_sold - Le nombre d'articles vendus.
  • product - Le nom du produit vendu.
  • date - La date de la vente.

Voici plusieurs lignes pour vous montrer à quoi ressemblent les données :

idfirst_namelast_nameitems_soldproductdate
1FrankCoyle42.00Product 12020-12-01
2FrankCoyle81.00Product 22020-12-01
3FrankCoyle14.00Product 32020-12-01
4NatashaHorvat69.00Product 12020-12-01
5NatashaHorvat44.00Product 22020-12-01

Remarquez qu'un vendeur peut apparaître dans plusieurs lignes. Il en va de même pour le produit et la date. Cela signifie qu'un vendeur peut vendre plusieurs produits à plusieurs dates. Cela signifie également qu'à une date donnée, le même produit peut être vendu par plusieurs vendeurs. Il est important de s'en souvenir pour les exemples qui vont suivre.

Utilisation de COUNT()

Vous avez déjà appris que cette fonction est utilisée pour compter les lignes d'un tableau. Alors, comptons-les !

COUNT() sans GROUP BY

Tout d'abord, comptons le nombre de lignes de la table sales tableau. Voici le code :

SELECT COUNT (id) AS number_of_columns
FROM sales;

Ce code utilise la fonction COUNT() pour compter le nombre de lignes dans la colonne id. Si vous comptez le nombre de lignes dans cette colonne, c'est aussi le nombre total de lignes dans le tableau. L'exécution du code renvoie les résultats dans la colonne number_of_columns. Il y a 27 lignes :

number_of_columns
27

J'espère que vous n'avez pas de problème avec cette simple instruction SELECT. Si c'est le cas, le cours SQL pour les débutants peut vous être utile. Il vous enseignera les principes fondamentaux des bases de données, de l'agrégation et de l'interrogation d'une ou plusieurs tables.

COUNT() avec GROUP BY

Votre prochaine tâche consiste à compter le nombre de produits différents vendus par chaque vendeur. Pensez à la façon dont les données sont présentées dans le tableau sales. Après avoir considéré cela, votre code devrait ressembler à ceci :

SELECT	first_name,
		last_name,
		COUNT (DISTINCT product) AS number_of_products
FROM sales
GROUP BY first_name, last_name;

La requête sélectionne d'abord le prénom et le nom du vendeur. Elle utilise ensuite la fonction COUNT() pour compter le nombre de produits, le résultat étant affiché dans la colonne number_of_products.

Remarquez la présence d'une clause DISTINCT. Cela signifie que le code ne comptera que les produits distincts, c'est-à-dire qu'il ne comptera un produit spécifique que la première fois qu'il apparaîtra pour un vendeur particulier. La clause DISTINCT est essentielle dans cette requête car le même produit peut apparaître plusieurs fois à des dates différentes. Sinon, la fonction COUNT() compterait un produit chaque fois qu'il apparaît dans la table, ce qui n'est pas le résultat souhaité.

Enfin, le résultat du code est groupé par les colonnes first_name et last_name car je veux voir le résultat pour chaque vendeur. Voici le résultat :

first_namelast_namenumber_of_products
FrankCoyle3
NatashaHorvat3
YolandaMartinez3

Il y a trois vendeurs et chacun d'entre eux vend trois produits différents.

La fonction COUNT() est intéressante dans la mesure où elle ignore les valeurs NULL. En raison de cette caractéristique, vous devez faire attention lorsque vous décidez ce que vous voulez compter et comment. Voici un article qui traite des nuances de la fonction COUNT(). Il peut vous aider à prendre ces décisions.

Si vous souhaitez renforcer vos connaissances de l'instruction GROUP BY, essayez notre cours Création de rapports basiques en SQL comme exercice pour GROUP BY. Dans ce cours, GROUP BY est expliqué en détail, ce qui pourrait vous être utile.

SUM() sans GROUP BY

Après avoir compté les lignes, il est temps d'apprendre à additionner toutes les valeurs d'un tableau. Cette fois, votre tâche consiste à obtenir le nombre total d'articles vendus. Avez-vous une idée de la façon de procéder ? Ne vous précipitez pas, prenez votre temps avant de jeter un coup d'œil à ma solution.

OK, je suppose que vous avez pris votre temps ; voici le code :

SELECT SUM(items_sold) AS total_items_sold
FROM sales;

Cette requête simple additionne la colonne items_sold de la table sales. Le résultat apparaîtra dans la colonne total_items_sold; le voici :

total_items_sold
1275.00

SUM() avec GROUP BY

Maintenant que vous êtes familiarisé avec la fonction SUM(), compliquons un peu les choses. Et si vous faisiez plaisir à tout le monde en calculant le nombre d'articles vendus par produit ? Voici comment procéder :

SELECT	product,
		SUM(items_sold) AS items_sold_per_product
FROM sales
GROUP BY product;

Ce code sélectionne la colonne produit dans la table sales. Puis il additionne le nombre d'articles vendus et affiche le résultat dans la colonne items_sold_per_product. Puisque votre tâche consiste à afficher le nombre d'articles par produit, vous devez regrouper le résultat par produit. Voilà, le résultat est :

productitems_sold_per_product
Product 1442.00
Product 2639.00
Product 3194.00

Si vous souhaitez vérifier le résultat, additionnez toutes les valeurs ci-dessus et vous obtiendrez 1 275. Cette somme est précisément le résultat que vous avez obtenu dans l'exemple précédent.

Laissez-moi maintenant vous montrer ce que fait la fonction AVG().

AVG() sans GROUP BY

Comme vous le savez déjà, la fonction AVG() calcule la valeur moyenne d'un ensemble de valeurs. Pour vous montrer comment elle fonctionne, imaginons que vous ayez besoin de calculer le nombre moyen d'articles vendus. Voici une requête qui vous donnera le bon résultat :

SELECT AVG(items_sold) AS avg_number_of_items_sold
FROM sales;

Ce code est similaire à l'exemple de la fonction SUM(). Il utilise maintenant la fonction AVG() pour calculer les valeurs moyennes dans la colonne items_sold. Le résultat de ce code apparaîtra dans la colonne avg_number_of_items_sold.

Le petit code renvoie un petit tableau :

avg_number_of_items_sold
47.222222

Faites attention lorsque vous utilisez AVG() sur une colonne avec des valeurs NULL. Cette fonction ne prendra pas en compte les lignes qui contiennent les valeurs NULL, et la valeur moyenne pourrait donc être différente de ce que vous attendez. Laissez-moi vous montrer ce que je veux dire. J'ai modifié le tableau sales pour vous montrer comment cela fonctionne :

idfirst_namelast_nameitems_soldproductdate
1FrankCoyle42Product 12020-12-01
2FrankCoyle81Product 22020-12-01
3FrankCoyle14Product 32020-12-01
4NatashaHorvatNULLProduct 12020-12-01

A votre avis, quelle sera la valeur moyenne de items_sold? Votre intuition vous dit que la fonction AVG() traiterait la valeur de NULL comme zéro ? Quelque chose comme ça :

AVG = (42+81+14+0)/4 = 34.25

Non, ton intuition est fausse ! Ignorer les valeurs NULL signifie que la ligne est traitée comme si elle n'existait pas du tout. Comme ceci :

AVG = (42+81+14)/3 = 45.67

AVG() avec GROUP BY

Cette fois, vous avez besoin d'un rapport qui indique la moyenne des articles vendus par date. Comment faire en utilisant la fonction AVG() avec GROUP BY? Vous avez probablement trouvé la solution tout seul. Si ce n'est pas le cas, voici la solution :

SELECT	date,
		AVG(items_sold) AS avg_items_per_date
FROM sales
GROUP BY date;

Cette requête sélectionne la colonne date dans le tableau sales. Là encore, la moyenne des articles vendus est calculée et le résultat est affiché dans la colonne avg_items_per_date. Vous voulez que le résultat soit affiché par date, vous devez donc regrouper le résultat par la colonne date.

dateavg_items_per_date
2020-12-0147
2020-12-0259
2020-12-0335.666666

Trois fonctions d'agrégation en moins, deux à venir. Essayons maintenant les fonctions MIN() et MAX(). Vous pouvez presque les considérer comme une seule et même fonction.

MIN() et MAX() sans GROUP BY

Les fonctions MIN() et MAX() peuvent être considérées comme les pôles opposés d'une même fonction. Elles fonctionnent de la même manière, seule une fonction renvoie la valeur minimale et l'autre maximale dans un ensemble de valeurs.

Pour vous montrer comment ces deux fonctions fonctionnent, affichons le nombre minimum et maximum d'articles vendus en un jour. Comment faire ? Puisque les données du tableau sales sont au niveau de la date, c'est simple :

SELECT	MIN(items_sold) AS min_daily_sale,
		MAX(items_sold) AS max_daily_sale
FROM sales;

Le code utilise d'abord la fonction MIN() sur la colonne items_sold pour trouver la plus petite valeur. Le résultat apparaîtra dans la colonne min_daily_sale. La fonction MAX() trouve la plus grande valeur, le résultat apparaissant dans la colonne max_daily_sale. Exécutez le code et voici le résultat que vous obtiendrez :

min_daily_salemax_daily_sale
7.00122.00

MIN() et MAX() avec GROUP BY

Dans l'exemple précédent, nous n'obtenons rien d'autre que les valeurs les plus petites et les plus grandes des ventes quotidiennes. Nous ne savons rien d'autre. Pour pimenter ce rapport, affichons le minimum et le maximum des articles vendus par vendeur et par produit. Prêt à voir la solution ? La voici :

SELECT	first_name,
		last_name,
		product,
		MIN(items_sold) AS min_sold_per_product,
		MAX(items_sold) AS max_sold_per_product
FROM sales
GROUP BY first_name, last_name, product;

Votre dernière requête de la journée mérite d'être la plus longue. Ne vous laissez pas effrayer, il n'y a rien que vous ne sachiez déjà. La requête sélectionne les colonnes first_name, last_name, et le produit dans la table sales. Vient ensuite la fonction MIN(), qui permet de calculer le plus petit nombre d'articles vendus par produit ; le résultat est affiché dans la colonne min_sold_per_product. Ensuite, il y a le plus grand nombre d'articles vendus par produit dans la colonne max_sold_per_product. Enfin, le résultat doit être groupé par le nom et le prénom des vendeurs et le nom du produit. Voici le rapport :

first_namelast_nameproductmin_sold_per_productmax_sold_per_product
FrankCoyleProduct 121.0066.00
FrankCoyleProduct 267.0099.00
FrankCoyleProduct 314.0025.00
NatashaHorvatProduct 112.0069.00
NatashaHorvatProduct 244.00122.00
NatashaHorvatProduct 324.0031.00
YolandaMartinezProduct 128.00112.00
YolandaMartinezProduct 230.0067.00
YolandaMartinezProduct 37.0033.00

Comme je l'ai promis, c'est votre dernière tâche ! Maintenant, la meilleure chose que vous puissiez faire est de pratiquer les fonctions d'agrégation SQL par vous-même. Essayez peut-être notre Exercices Pratiques de SQLqui contient une bonne section sur GROUP BY. Ou bien jetez un coup d'œil à un autre article, qui donne cinq exemples de GROUP BY; peut-être est-ce exactement ce dont vous avez besoin.

Trouvez-vous les fonctions agrégées SQL utiles ?

La lecture de cet article ne suffit pas pour maîtriser les fonctions agrégées. Cependant, j'ai essayé de vous donner un aperçu pratique des fonctions d'agrégation de SQL - ce qu'elles font et comment elles le font. Je vous ai également montré comment utiliser les fonctions d'agrégation avec et sans GROUP BY. Le moment est peut-être venu d'approfondir l'étude de GROUP BY, compte tenu de l'utilité de cette fonction et de ses extensions dans le monde du travail.

N'hésitez pas à partager votre expérience des fonctions d'agrégation SQL dans la section des commentaires.