Lorsque vous travaillez avec des bases de données, vous souhaitez parfois savoir combien de lignes seront renvoyées par une requête, sans réellement renvoyer les résultats de la requête. Ou parfois, vous voudrez peut-être simplement savoir combien de lignes se trouvent dans une table donnée.
Dans SQL Server, vous pouvez utiliser COUNT()
de T-SQL. fonction pour renvoyer le nombre de lignes qui seraient renvoyées dans une requête.
Les données
Voici les données que nous utiliserons dans les exemples de cette page :
SÉLECTIONNER *FROM Tâches ;
Résultat :
TaskId TaskName TaskDescription TaskCode------ ------------ --------------- --------1 Flux chats TBA null 2 Chien d'eau TBA null 3 Nourrir le jardin TBA null 4 Peinture tapis TBA null 5 Nettoyer le toit TBA null 6 Nourrir les chats TBA null
Exemple – Compter toutes les lignes d'un tableau
Voici un exemple d'utilisation de COUNT()
fonction pour retourner le nombre total de lignes dans une table :
SELECT COUNT(*)FROM Tâches ;
Résultat :
6
Cela renvoie le nombre de lignes dans le tableau, car nous n'avons fourni aucun critère pour affiner les résultats.
Exemple – Ajout de critères
Voici un exemple de comptage du nombre de lignes renvoyées en fonction d'un critère donné :
SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%dog%' OR TaskName LIKE '%cat%' ;
Résultat :
3
Exemple – Spécifier une seule colonne
Les exemples précédents utilisent tous un astérisque pour appliquer le décompte à toutes les colonnes. Vous avez également la possibilité de spécifier une colonne spécifique.
Exemple :
SELECT COUNT(TaskName)FROM Tâches ;
Résultat :
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(TaskCode)FROM Tâches ;
Résultat :
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 ne renvoyer que le nombre de valeurs uniques (non nulles).
Vous avez peut-être remarqué que chaque ligne de notre TaskDescription
colonne contient la même valeur ("TBA"). Et le TaskName
la colonne a également 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 :
5
Et ici, il est appliqué à la TaskDescription
tableau (où toutes les valeurs sont identiques) :
SELECT COUNT(DISTINCT TaskDescription)FROM Tâches ;
Résultat :
1
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.
Exemple :
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 :
ArtistName Album Count------------------------- -----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael apprend à rocker 3 Tom Jones 3Cet exemple utilise une base de données différente de celle des exemples précédents. Il ne renvoie que les artistes qui ont sorti plus d'un album. Nous pourrions changer ce nombre autant d'albums que nous le souhaitons :
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 :
ArtistName Album Count------------------------- -----------Iron Maiden 5La fonction COUNT_BIG()
T-SQL a également un
COUNT_BIG()
fonction qui fonctionne exactement commeCOUNT()
, sauf queCOUNT()
renvoie un int type de données etCOUNT_BIG()
renvoie un bigint type de données.Cette fonction peut être utile pour les vues indexées avec des requêtes groupées. Vous pourriez trouver si vous essayez de créer un index pour une vue qui contient
COUNT(*)
, que vous obtenez une erreur comme celle-ci :Impossible de créer un index sur la vue "Music.dbo.AlbumsByArtist" car il utilise l'agrégat COUNT. Utilisez COUNT_BIG à la place.Dans de tels cas, modifier la vue pour utiliser
COUNT_BIG(*)
devrait résoudre le problème.