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