3.3.4 Récupérer des informations à partir d'une table
3.3 Création et utilisation d'une base de données
3 Tutoriels d'introduction
Manuel de Référence MySQL 4.1 : Version Française
. Sélectionner toutes les données . Sélectionner des lignes particulières . Sélectionner des colonnes particulières . Trier les enregistrements . Calcul sur les Dates . Travailler avec la valeur NULL . Recherche de modèles ->Compter les lignes . Utiliser plus d'une table
|
3.3.4.8 Compter les lignes
Les bases de données sont souvent employées pour répondre à la question :
``Combien de fois un certain type de données se trouve dans la table ?''
Par exemple, vous aimeriez savoir combien d'animaux vous avez, ou bien combien
d'animaux chaque propriétaire possède, ou encore savoir différentes choses
concernant vos animaux.
Savoir combien vous avez d'animaux revient à se poser la question : ``Combien
de lignes y a-t-il dans la table
animal
?'' parce qu'il y a un enregistrement
par animal. La fonction
COUNT()
compte le nombre de résultats non
NULL
,
donc, la requête pour compter les animaux ressemble à ceci :
mysql> SELECT COUNT(*) FROM animal; +----------+ | COUNT(*) | +----------+ | 9 | +----------+
|
Vous pouvez trouver également les noms des propriétaires des animaux.
Vous pouvez utiliser
COUNT()
si vous voulez trouver combien d'animaux
possède chaque propriétaire :
mysql> SELECT maitre, COUNT(*) FROM animal GROUP BY maitre; +--------+----------+ | maitre | COUNT(*) | +--------+----------+ | Benny | 2 | | Diane | 2 | | Gwen | 3 | | Harold | 2 | +--------+----------+
|
Notez l'utilisation de la clause
GROUP BY
pour grouper tous les enregistrements
par propriétaire. Sans cela, vous auriez le message d'erreur suivant :
mysql> SELECT maitre, COUNT(maitre) FROM animal; ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
|
COUNT()
et
GROUP BY
sont utiles pour caractériser vos données
de diverses façons. Les exemples suivants montrent différentes
manières pour obtenir des statistiques sur les animaux.Nombre d'animaux par espèce :
mysql> SELECT espece, COUNT(*) FROM animal GROUP BY espece; +---------+----------+ | espece | COUNT(*) | +---------+----------+ | oiseau | 2 | | chat | 2 | | chien | 3 | | hamster | 1 | | serpent | 1 | +---------+----------+
|
Nombre d'animaux par sexe :
mysql> SELECT sexe, COUNT(*) FROM animal GROUP BY sexe; +------+----------+ | sexe | COUNT(*) | +------+----------+ | NULL | 1 | | f | 4 | | m | 4 | +------+----------+
|
(Dans ce résultat,
NULL
indique les sexes inconnus.)
Nombre d'animaux par espèce et sexe :
mysql> SELECT espece, sexe, COUNT(*) FROM animal GROUP BY espece, sexe; +---------+------+----------+ | espece | sexe | COUNT(*) | +---------+------+----------+ | oiseau | NULL | 1 | | oiseau | f | 1 | | chat | f | 1 | | chat | m | 1 | | chien | f | 1 | | chien | m | 2 | | hamster | f | 1 | | serpent | m | 1 | +---------+------+----------+
|
Vous n'avez pas besoin de rechercher une table entière quand vous employez
COUNT()
. Par exemple, la requête précédente, si vous voulez trouver
uniquement les chiens et les chats, ressemble à cela :
mysql> SELECT espece, sexe, COUNT(*) FROM animal -> WHERE espece = "chien" OR espece = "chat" -> GROUP BY espece, sexe; +---------+------+----------+ | espece | sexe | COUNT(*) | +---------+------+----------+ | chat | f | 1 | | chat | m | 1 | | chien | f | 1 | | chien | m | 2 | +---------+------+----------+
|
Ou bien, si vous voulez trouver le nombre d'animaux par sexe, uniquement pour les
animaux dont le sexe est connu :
mysql> SELECT espece, sexe, COUNT(*) FROM animal -> WHERE sexe IS NOT NULL -> GROUP BY espece, sexe; +---------+------+----------+ | espece | sexe | COUNT(*) | +---------+------+----------+ | oiseau | f | 1 | | chat | f | 1 | | chat | m | 1 | | chien | f | 1 | | chien | m | 2 | | hamster | f | 1 | | serpent | m | 1 | +---------+------+----------+
|
|