Si vous travaillez dans le domaine de la programmation informatique ou que vous songez à y entrer, vous allez souvent manipuler le langage SQL ainsi que ses nombreuses fonctions dont SQL count(). C’est d’autant plus valable si vous êtes intéressé par le Big Data qui, comme son nom l’indique, est le domaine où les données sont au cœur de tout. En réalité, toutes les personnes qui gèrent un site web ou une application ont intérêt à connaître ce langage de base de données, car il peut toujours servir.
Dans cet article, vous allez découvrir les différentes manières d’utiliser SQL count() dans Mysql.
Sql count() : c’est quoi ?
La fonction count() en SQL est une fonction qui retourne le nombre d’enregistrements dans une table. Cela est très pratique et important par exemple si vous souhaitez connaître le nombre de commentaires sur un article de blog. Si vous voulez également savoir le nombre d’utilisateurs présents, il vous suffit d’utiliser la fonction count().
Syntaxe
La requête suivante permet de connaître le nombre de lignes présentes dans une table, quelle que soit la valeur de la ligne (nulle ou non).
SELECT COUNT(*) FROM table
Vous pouvez aussi choisir une colonne en particulier et chercher à connaître le nombre de lignes présentes dans celle-ci. La requête est la suivante :
SELECT COUNT(nom_colonne) FROM table
où nom_colonne est le nom de la colonne en question.
Description générale
Voici une requête qui contient SQL count() avec quelques commandes supplémentaires servant à affiner le résultat obtenu :
SELECT expression1, expression2, ... expression_n,
COUNT(aggregate_expression)FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
[ORDER BY expression [ ASC | DESC ]];
Développons cette requête :
- expression1, expression2, … expression_n
Ces expressions ne sont pas prises dans la fonction count(), mais doivent être spécifiées dans la clause GROUP BY à la fin de l’instruction SQL.
- aggregate_expression
Il s’agit de la colonne dont la fonction retournera le nombre de lignes présentes.
- tables
Ce sont les tables dans lesquelles vous souhaitez extraire des informations (données). C’est obligatoire de mettre au moins une table dans la clause FROM. On peut également solliciter plusieurs tables en utilisant des jointures.
- WHERE condition
Cette instruction est optionnelle, mais vous ne pouvez l’utiliser que lorsque vous souhaitez mettre en place certaines conditions ou certains critères de sélection.
- ORDER BY expression
Celle-ci est également optionnelle. Elle est utilisée pour afficher le résultat de la requête dans un ordre donné.
- ASC
Cette clause est optionnelle. Avec cette instruction, le résultat sera affiché dans un ordre croissant. C’est le comportement par défaut quand vous ne précisez rien après l’instruction ORDER BY.
- DSC
Elle est aussi optionnelle. Le résultat est affiché dans un ordre décroissant avec cette instruction.
Quelques exemples pratiques
La fonction SQL count() compte les lignes dont les valeurs ne sont pas nulles. Explorons cela dans l’exemple suivant.
Supposons que vous avez une table nommée clients avec ces données :
Maintenant, lancer la requête ci-dessous :
SELECT COUNT(Numéro) FROM client;
En entrant cette instruction, vous obtenez 6, car ici, les 6 lignes sont toutes non nulles. Mais dans le cas où l’on rencontre une valeur nulle, que se passe-t-il ? Voyons cela en exécutant la requête suivante :
SELECT COUNT(site_web_favori) FROM clients;
L’instruction que nous venons d’exécuter renvoie 5, car la colonne site_web_favori contient une ligne nulle qui ne sera pas prise en compte par la fonction.
Utilisation d’une seule expression dans la fonction count
Dans cet exemple, vous allez voir comment utiliser la fonction count() avec une seule expression comme requête. Tout d’abord, récupérons la liste de toutes les données dont on dispose dans la table employe avec cette requête :
SELECT * FROM ‘employe’
Une fois que nous obtenons le résultat, exécutons la requête suivante :
SELECT COUNT(*) AS total
FROM employees
WHERE salaire > 50000;
Le résultat ici est 3, car dans la colonne salaire, seules les lignes avec une valeur supérieure à 50000 seront comptées.
Utilisation de GROUP BY
Il y a des moments où vous devez utiliser la clause GROUP BY avec la fonction count(). C’est le cas lorsqu’aucune colonne n’est spécifiée dans la fonction count(), mais plutôt dans l’instruction SELECT.
SELECT dept_id, COUNT(*) AS total
FROM employees
WHERE salary > 50000
GROUP BY dept_id;
Le résultat de cette requête est 2, car la fonction a renvoyé le nombre d’employés qui gagne plus de 50000 $ par mois. Et comme la colonne dept_id n’est pas mise dans la fonction count(), elle doit être répertoriée dans la clause GROUP BY.
Utilisation de DISTINCT avec la fonction count()
Dans le cas des colonnes qui contiennent des doublons, vous pouvez compter les lignes distinctes, c’est-à-dire que la fonction ne comptabilise pas les doublons.
SELECT COUNT(DISTINCT nom_colonne) FROM table
Illustrons cela avec cet exemple :
SELECT COUNT(DISTINCT dept_id) AS total
FROM employees
WHERE salary > 50000;
Ici, la fonction renvoie le nombre unique des valeurs qui se trouvent dans la colonne dept_id et qui gagnent plus de 50000$ le mois.
Règles des performances de la fonction count ()
Le retour de la fonction count() reste le même, quels que soient le ou les champs non nuls que vous soumettez en paramètres à la fonction (ceux qui se trouvent dans la parenthèse). Cependant, vous pouvez mettre comme paramètre le chiffre 1 pour obtenir une meilleure performance.
Donc, au lieu d’écrire ceci :
SELECT dept_id, COUNT(*) AS total
FROM employees
WHERE salary > 50000
GROUP BY dept_id;
Vous pouvez remplacer COUNT(*) par COUNT(1) :
SELECT dept_id, COUNT(1) AS total
FROM employees
WHERE salary > 50000
GROUP BY dept_id;
Avec cela, la fonction n’aura pas besoin de prendre tous les champs de la table employe comme avec l’instruction count(*). La valeur récupérée de chaque champ qui répond aux critères est 1.
La fonction SQL count() avec HAVING
Il est possible de définir une instruction avec select en utilisant la clause HAVING et la fonction count(). La clause HAVING remplace la clause WHERE.
Pour récupérer une donnée spécifique d’une colonne, vous pouvez combiner les clauses GROUP BY et HAVING. Cela est l’équivalent de la condition spécifiée dans la clause HAVING.
Par exemple, si l’on veut connaître le nombre d’agents qui respectent la condition suivante dans une base de données : “le nombre d’agents doit être supérieur à 3”, on exécute la requête suivante :
SELECT COUNT( * ) FROM agents HAVING COUNT(*)>3;
Utilisation de la condition dans count()
Précédemment, vous avez vu la manière d’utiliser la fonction count() sous la forme count(*), count(DISTINCT), etc. Ce sont là les méthodes générales d’utilisation de cette fonction.
Toutefois, vous pouvez aussi passer par une autre méthode à savoir mettre des conditions sous forme d’instruction CASE dans la fonction.
On va se servir de la table employe pour obtenir le nombre d’employés qui gagne plus de 50000$.
Voici à quoi ressemble la requête en utilisant la méthode générale :
SELECT COUNT(*) FROM employe WHERE salaire > 50000
Si l’on utilise l’instruction CASE avec la fonction count(), voici ce que l’on obtient :
SELECT COUNT(CASE salaire > 50000
WHEN 1
THEN 1
ELSE NULL
END)
FROM employe
La fonction SQL count() avec la condition if
Voyons directement sa syntaxe :
SELECT [ DISTINCT ] COUNT ([ DISTINCT ] IF ( , , NULL )) AS alias_nom FROM votre_colonne ;
D’après cette syntaxe,
- La fonction count() comporte la condition if ;
- Si la condition est vérifiée, c’est-à-dire que le résultat est true, la fonction commence le comptage en fonction de l’expression. Mais si la condition n’est pas vérifiée, le comptage ne se fait pas. À la place, il retourne le nombre de valeurs nulles dans la colonne ;
- Le mot DISTINCT est facultatif ;
- alias_nom est le nom que vous souhaitez attribuer au résultat du comptage.
- votre_colonne est la colonne choisie dans la table.
Utilisons la table suivante pour illustrer cela :
À partir de cette table, nous allons récupérer le nombre des matières associées à la note A avec cette commande :
SELECT DISTINCT
COUNT(DISTINCT IF(student_grade = 'A',
student_subject,
NULL)) AS countOfSubjects
FROM
students_data;
En résumé, il faut savoir que la fonction count() renvoie le nombre d’éléments présents dans une table de données quelconque. COUNT est une fonction déterministe quand elle est utilisée sans les clauses OVER et ORDER BY, mais non déterministe quand elle est utilisée avec ces deux clauses.
Voilà, vous savez maintenant utiliser cette fonction SQL. Si vous souhaitez approfondir vos connaissances en programmation informatique et en Big Data, vous pouvez télécharger gratuitement cette mini formation sur la programmation Scala pour la Data.