Retour à la liste des articles Articles
9 minutes de lecture

La fonction SQL Count expliquée avec 7 exemples

L'une des fonctions d'agrégation les plus utiles en SQL est la fonction fonction COUNT(). Si vous êtes novice en SQL et que vous souhaitez découvrir les différentes façons d'utiliser la fonction COUNT(). COUNT() avec quelques exemples pratiques, cet article est fait pour vous.

La fonction COUNT() est l'une des fonctions d'agrégation les plus utiles en SQL. La fonction COUNT() permet de compter le nombre total de commandes passées par un client au cours des derniers jours, le nombre de visiteurs uniques qui ont acheté un billet de musée ou le nombre d'employés d'un service.

Mais avant de passer à des exemples concrets de SQL COUNT(), jetez un coup d'œil à la syntaxe type pour l'utilisation de la fonction COUNT(). La syntaxe de base est la suivante :

SELECT COUNT([DISTINCT] )
FROM 
WHERE ;

La fonction COUNT() apparaît dans la partie SELECT de la requête et peut accepter un nom de colonne comme argument. En option, vous pouvez spécifier le mot-clé DISTINCT pour ne compter que les occurrences uniques des valeurs. Ne vous inquiétez pas si vous ne comprenez pas à ce stade ; je vous expliquerai l'utilisation de DISTINCT avec COUNT() plus tard dans cet article avec des exemples.

Plongeons dans la compréhension de la fonction SQL COUNT() et des différentes façons de l'utiliser à l'aide de quelques cas concrets. Pour la démonstration, disons que vous travaillez dans une entreprise qui vend des voitures et des motos. Vous avez à votre disposition l'ensemble de données suivant.

Le site products table :

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_1949Alpine Renault 1300Classic CarsCMC9858
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102
S10_4757Alfa Romeo GTAClassic Carsnull8568

La table comporte 5 colonnes avec les détails suivants :

  1. product_code: Un code unique qui identifie chaque produit.
  2. product_name: Le nom de la voiture ou de la moto.
  3. product_line: Une classification qui identifie si le produit est une voiture ou une moto.
  4. product_vendor: Un code permettant d'identifier le vendeur correspondant au produit.
  5. buy_price: Le prix que le vendeur demande pour le produit.

Supposons maintenant que vous vouliez connaître le nombre de produits dans le tableau. C'est là que la fonction COUNT() peut vous aider. La requête ressemble à quelque chose comme ceci :

SELECT COUNT(product_code)
FROM products;

Le résultat :

COUNT(product_code)
5

Dans cette requête, SQL compte toutes les valeurs de product_code dans la table products et renvoie le nombre total. Ceci est dû au fait que nous avons passé la colonne product_code comme argument à notre fonction COUNT(). Si vous souhaitez simplement calculer le nombre de lignes dans la table products tableau, vous pouvez faire quelque chose comme ceci :

SELECT COUNT(*)
FROM products;

Le résultat :

COUNT(*)
5

Ici, nous avons utilisé "*" comme argument de la fonction, qui demande simplement à SQL de compter toutes les lignes de la table.

Maintenant, disons que vous voulez compter toutes les lignes de produits dans la table. Sur la base de ce que vous avez appris dans l'exemple précédent, vous écrirez probablement quelque chose comme ceci.

SELECT COUNT(product_line)
FROM products;

La sortie :

COUNT(product_line)
5

La requête renvoie 5 comme résultat parce que SQL a compté une valeur de product_line pour chaque ligne de la table. Il est important de noter que la fonction COUNT() ne tient pas compte des doublons par défaut. Par exemple, la table products n'a que deux valeurs uniques pour la colonne product_line - "Motorcycles" et "Classic Cars" - mais notre requête renvoie quand même 5 comme valeur. Donc, si vous voulez compter uniquement les valeurs uniques dans la table, vous devez utiliser le mot-clé DISTINCT avec votre fonction COUNT().

La requête :

SELECT COUNT(DISTINCT product_line)
FROM products;

Le résultat :

COUNT(DISTINCT product_line)
2

Dans cette requête, puisque nous avons explicitement spécifié le mot-clé DISTINCT dans l'argument de la fonction COUNT(), SQL ne compte que les valeurs uniques de product_line.

Vous pouvez également utiliser des conditions dans la clause WHERE pour ne compter que des lignes spécifiques. Par exemple, disons que vous voulez connaître le nombre de produits qui appartiennent à la ligne de produits "Motos". Pour ce faire, vous pouvez utiliser la requête suivante :

SELECT COUNT(product_code)
FROM products
WHERE product_line = ‘Motorcycles’;

Le résultat :

COUNT(product_code)
3

Ici, SQL filtre d'abord toutes les lignes où la valeur de product_line est "Motorcycles". Il compte ensuite le nombre de codes de produits.

Une chose importante à noter est que la fonction SQL COUNT() ne prend pas en compte NULL lors du comptage. Dans la table products la valeur de product_vendor pour product_code "S10_4757" est NULL. Ainsi, la requête suivante renvoie la valeur 4 et non 5.

SELECT COUNT(product_vendor)
FROM products;

Le résultat :

COUNT(product_vendor)
4

Les valeurs "HLD", "CMC", "HMD" et "RSD" sont incluses dans le compte, mais NULL est exclu.

La fonction SQL COUNT() avec une clause GROUP BY

Si vous travaillez (ou aspirez à travailler) en tant qu'analyste et que vous utilisez SQL pour effectuer des analyses de données, vous utilisez dans la plupart des cas la fonction COUNT() avec une clause GROUP BY.

La clause GROUP BY de SQL est utilisée pour agréger (regrouper) des données en groupes afin de faciliter le calcul de métriques agrégées. Les fonctions d'agrégation disponibles en SQL sont COUNT(), SUM(), AVG(), MIN() et MAX(). Ces fonctions renvoient une valeur unique pour plusieurs lignes. L'agrégation est importante car il n'est pas toujours possible de passer en revue chaque ligne pour obtenir des informations.

Le regroupement des clients en fonction de leurs besoins et comportements spécifiques (segmentation), le regroupement des produits en différents types ou le regroupement de diverses personnes en fonction de leurs revenus sont autant d'exemples d'agrégation.

Prenons un exemple à l'aide de la fonction COUNT() pour mieux comprendre. Supposons que vous souhaitiez calculer le nombre de produits dans chaque ligne de produits.

La requête :

SELECT product_line,
	 COUNT(product_code)
FROM products
GROUP BY product_line;

Le résultat :

product_lineCOUNT(product_code)
Motorcycles3
Classic Cars2

Dans cette requête, SQL obtient d'abord toutes les valeurs uniques de product_line comme première colonne, puis compte le nombre de produits (product_code) appartenant à chacune d'elles. En bref, SQL agrège toutes les lignes par ligne de produits, puis utilise la fonction d'agrégation (COUNT() dans ce cas) pour calculer le nombre de produits pour chaque ligne de produits.

Il est important de spécifier toutes les colonnes (sauf la partie de la fonction d'agrégation) que vous utilisez dans la partie SELECT de la requête dans la clause GROUP BY. Sinon, SQL émet une erreur. Vous pouvez lire cet article pour comprendre les erreurs courantes avec les clausesGROUP BY.

Jusqu'à présent, les exemples que j'ai montrés dans cet article ont la fonction COUNT() dans la partie SELECT de la requête. Cependant, COUNT() est une fonction polyvalente ; vous pouvez l'utiliser de différentes manières et dans différentes parties de la requête. Voyons cela de plus près.

La fonction SQL COUNT() avec condition dans une clause HAVING

La clause HAVING est utilisée pour filtrer les groupes en fonction des conditions de la fonction d'agrégation. Par exemple, disons que vous voulez renvoyer uniquement les groupes agrégés dont le nombre est supérieur à un certain nombre.

Avec notre ensemble de données, imaginez que vous voulez seulement regarder les lignes de produits avec plus de 2 produits.

La requête :

SELECT product_line,
	   COUNT(product_code)
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>2;

Le résultat :

product_lineCOUNT(product_code)
Motorcycles3

La requête fonctionne de manière similaire à la requête précédente, dans laquelle SQL regroupe les lignes sur la base des valeurs uniques de product_line et renvoie ensuite le nombre de produits appartenant à chaque ligne de produits à l'aide de la fonction COUNT(). Cependant, comme nous avons choisi de ne garder que les lignes de produits ayant plus de deux produits, nous n'avons pas la ligne de produits "Classic Cars" (qui n'a que 2 produits) dans les résultats.

La fonction SQL COUNT() dans une clause ORDER BY

Il se peut également que vous souhaitiez afficher toutes les lignes de produits, mais que vous vouliez les classer en fonction du nombre de produits qu'elles contiennent. Dans ce cas, nous devons utiliser la fonction COUNT() dans la clauseORDER BY.

La requête :

SELECT   product_line,
	   COUNT(product_code)
FROM     products
ORDER BY COUNT(product_line);

Le résultat :

product_lineCOUNT(product_code)
Classic Cars2
Motorcycles3

Dans cette requête, SQL renvoie les lignes de produits uniques en tant que groupes et le nombre de produits dans chaque ligne de produits en tant que compte. Toutefois, en raison de la clause ORDER BY, les résultats sont classés par ordre croissant par la fonction COUNT().

La fonction SQL COUNT() avec condition dans une clause WHERE

La fonction COUNT() ne peut pas être utilisée directement dans une clause WHERE. Ainsi, par exemple, si vous voulez récupérer tous les détails des produits qui appartiennent à une ligne de produits comportant au moins 3 produits, vous ne pouvez pas utiliser cette requête.

SELECT *
FROM products
WHERE COUNT(product_line)>=3;

Le résultat :

ERROR 1111 (HY000): Invalid use of group function

Vous ne pouvez pas non plus réaliser cette opération avec les clauses GROUP BY et HAVING. En effet, ces clauses ne vous donnent que des lignes groupées, mais pas tous les détails sur les produits dont vous avez besoin ici.

Au lieu de cela, vous devez utiliser ce que l'on appelle une sous-requête (une requête à l'intérieur de la requête principale). Voici à quoi ressemble votre requête.

SELECT *
FROM products
WHERE product_line in (SELECT product_line
    			   FROM products
			   GROUP BY product_line
   HAVING COUNT(product_code)>=3);

Le résultat :

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102

Prêt à utiliser la fonction COUNT() ?

Maintenant que vous avez lu cet article, vous devriez avoir une bonne compréhension de la façon d'utiliser la fonction COUNT(). Une fois que vous aurez commencé à utiliser la fonction dans vos requêtes, votre compréhension s'améliorera encore.

Si vous êtes novice en SQL et que vous souhaitez créer une base solide avant de vous lancer dans des travaux pratiques, je vous recommande cette piste de LearnSQL.fr. Je l'aime particulièrement parce qu'il offre une couverture complète des concepts de base et vous donne une base pour développer votre carrière.

La pratique joue un rôle important dans votre apprentissage de SQL. Continuez donc à vous exercer à différents types de requêtes, à repousser vos limites et à progresser.

Bien sûr, la première étape est la plus difficile. La bonne nouvelle, c'est qu'il n'y a pas de pénurie d'excellent matériel d'apprentissage sur le site LearnSQL.fr pour vous aider dans votre parcours. Alors, commencez dès aujourd'hui !