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

Comment renvoyer le nombre de lignes dans un résultat de requête dans SQL Server

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 3

Cet 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 5

La fonction COUNT_BIG()

T-SQL a également un COUNT_BIG() fonction qui fonctionne exactement comme COUNT() , sauf que COUNT() renvoie un int type de données et COUNT_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.