Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL COUNT() - Obtenir le nombre de lignes à renvoyer par une requête

MySQL inclut un COUNT() fonction, qui permet de savoir combien de lignes seraient renvoyées par une requête. Cette fonction fait partie du standard SQL et peut être utilisée avec la plupart des systèmes de gestion de bases de données relationnelles.

Le COUNT() La fonction peut également être utilisée pour affecter les résultats d'une requête si nécessaire, par exemple, en renvoyant uniquement les résultats dont le nombre de lignes est supérieur à un montant donné.

Cet article contient des exemples de COUNT() utilisation dans MySQL.

Les données

Tout d'abord, voici les données que nous utiliserons pour les exemples de cette page :

SÉLECTIONNER *FROM Tâches ;

Résultat :

+--------+-------------------+----------------- +| ID de tâche | NomTâche | DescriptionTâche |+--------+-------------------+-----------------+ | 1 | Faire du jardin | NUL || 2 | Nourrir les chats | NUL || 3 | Peindre le toit | NUL || 4 | Promenez votre chien | NUL || 5 | Détendez-vous | NUL || 6 | Nourrir les chats | NULL |+--------+-------------------+-----------------+ 

Compter toutes les lignes d'un tableau

Vous pouvez utiliser COUNT() pour renvoyer le nombre total de lignes d'un tableau :

SELECT COUNT(*)FROM Tâches ;

Résultat :

+----------+| COMPTE(*) |+----------+| 6 |+----------+ 

Cela renvoie le nombre de lignes dans le tableau, car nous n'avons fourni aucun critère pour affiner les résultats.

Affiner les résultats

Lorsque nous ajoutons un WHERE clause qui réduit le jeu de résultats, nous obtenons un nombre plus petit :

SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%cat%' ;

Résultat :

+----------+| COMPTE(*) |+----------+| 2 |+----------+

Colonne unique vs astérisque (*)

Les exemples précédents utilisent tous un astérisque pour appliquer le décompte à toutes les colonnes. Comme pour toute requête, l'astérisque est facultatif et est utilisé comme caractère générique pour renvoyer toutes les colonnes. Ainsi, lors de l'utilisation de COUNT() fonction, vous avez également la possibilité de fournir des colonnes spécifiques (par opposition à toutes les colonnes) comme argument.

Exemple :

SELECT COUNT(TaskName)FROM Tâches ;

Résultat :

+-----------------+| COUNT(NomTâche) |+-----------------+| 6 |+-----------------+

Bien que cet exemple renvoie le même résultat que nous avons obtenu lorsque nous avons utilisé l'astérisque, ce ne sera pas nécessairement toujours le cas. Par exemple, voici ce qui se passe si nous spécifions une colonne différente :

SELECT COUNT(TaskDescription)FROM Tâches ;

Résultat :

+------------------------+| COUNT(Description de tâche) |+-----------------------+| 0 |+------------------------+

Dans ce cas, nous obtenons zéro, car cette colonne particulière contient des valeurs nulles dans chaque ligne.

Exemple – Distinct

Vous pouvez ajouter le DISTINCT argument pour retourner uniquement le nombre de lignes avec différents non-NULL valeurs.

Vous avez peut-être remarqué que le TaskName colonne a une valeur en double ("Feed cats" apparaît deux fois). Cela pourrait causer des problèmes si vous ne voulez pas que les doublons soient comptés.

Voici à quoi cela ressemble si nous appliquons le DISTINCT argument du TaskName colonne :

SELECT COUNT(DISTINCT TaskName)FROM Tâches ;

Résultat :

+-----------------------------------+| COUNT(NOM Tâche DISTINCT) |+-------------------------------+| 5 |+---------------------------+

Ainsi, bien que le tableau contienne six lignes, deux d'entre elles sont des doublons. Par conséquent, ces deux sont comptés comme un, nous obtenons un résultat de cinq.

Exemple :la clause HAVING

Vous pouvez également utiliser COUNT() avec le HAVING clause pour limiter un jeu de résultats en fonction du nombre de lignes qui seraient renvoyées.

Voici un exemple utilisant un ensemble de données différent des exemples précédents :

USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Albums al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1; 

Résultat :

+-----------------------+-------------+| NomArtiste | Nombre d'albums |+-----------------------+-------------+| Vierge de Fer | 5 || Devin Townsend | 3 || Michael apprend à rocker | 3 || Tom Jones | 3 || Allan Holdsworth | 2 |+-----------------------+-------------+

Cette requête renvoie uniquement les artistes qui ont sorti plus d'un album. Voici ce qui se passe lorsque nous augmentons la valeur dans le HAVING clause :

USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artistes arINNER JOIN Albums al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4; 

Résultat :

+-------------+-------------+| NomArtiste | Nombre d'albums |+-------------+-------------+| Vierge de fer | 5 |+-------------+-------------+