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
animaux
?'' parce qu'il y a un enregistrement
par animaux. 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 animaux; +----------+ | 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 animaux 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 animaux; 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 animaux 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 animaux 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 animaux 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 animaux -> 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 animaux -> 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 | +---------+------+----------+
|
|