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

Combinez SQLite Count() avec GROUP BY pour ajouter une colonne "Count" à votre ensemble de résultats

Si vous devez ajouter une colonne "count" au jeu de résultats d'une requête de base de données lors de l'utilisation de SQLite, vous pouvez utiliser le count() fonction pour fournir le nombre, et le GROUP BY clause pour spécifier la colonne pour laquelle regrouper les résultats.

Exemple

Voici un exemple rapide à démontrer.

SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;

Résultat :

ArtistId    count(Title)
----------  ------------
1           2           
2           2           
3           1           
4           1           
5           1           
6           2           
7           1           
8           3           
9           1           
10          1           

Dans ce cas, l'identifiant de chaque artiste est répertorié dans ArtistId et le nombre d'albums pour cet artiste est répertorié dans la colonne count(Title) colonne.

Pour rendre cela un peu plus facile à lire, voici une requête similaire, mais cette fois je renvoie le nom de l'artiste au lieu de l'ID. Je fais cela en effectuant une jointure interne avec l'artiste tableau.

Dans ce cas, j'ajoute un WHERE clause pour ne renvoyer que les artistes qui commencent par la lettre D .

SELECT 
  ar.Name, 
  count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name;

Résultat :

Name             count(al.Title)
---------------  ---------------
David Coverdale  1              
Deep Purple      11             
Def Leppard      1              
Dennis Chambers  1              
Djavan           2              
Dread Zeppelin   1              

Classement par nombre()

Nous pouvons modifier légèrement cela afin que le jeu de résultats soit trié par le nombre. En d'autres termes, nous pouvons l'ordonner de manière à ce que les artistes avec le plus d'albums soient répertoriés en premier, et vice-versa.

SELECT 
  ar.Name, 
  count(al.Title)
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY count(al.Title) DESC;

Résultat :

Name                  count(al.Title)
--------------------  ---------------
Deep Purple           11             
Djavan                2              
David Coverdale       1              
Def Leppard           1              
Dennis Chambers       1              
Dread Zeppelin        1              

En fait, nous pouvons aller plus loin et ajouter un alias pour le count() . Cela nous évitera d'avoir à dupliquer cela dans le ORDER BY clause.

SELECT 
  ar.Name, 
  count(al.Title) AS AlbumCount
FROM Album al
INNER JOIN Artist ar
ON ar.ArtistId = al.ArtistId
WHERE ar.Name LIKE 'D%'
GROUP BY ar.Name
ORDER BY AlbumCount DESC;

Résultat :

Name                  AlbumCount
--------------------  ----------
Deep Purple           11        
Djavan                2         
David Coverdale       1         
Def Leppard           1         
Dennis Chambers       1         
Dread Zeppelin        1