Om du behöver lägga till en "count"-kolumn till resultatuppsättningen av en databasfråga när du använder SQLite, kan du använda count()
funktion för att tillhandahålla räkningen och GROUP BY
sats för att specificera kolumnen som resultaten ska grupperas för.
Exempel
Här är ett snabbt exempel att visa.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Resultat:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
I det här fallet visas varje artists ID i ArtistId kolumnen och antalet album för den artisten listas i count(Title) kolumn.
För att göra detta lite lättare att läsa, här är en liknande fråga, men den här gången returnerar jag artistens namn istället för ID. Jag gör detta genom att utföra en inre koppling med konstnären bord.
I det här fallet lägger jag till en WHERE
klausul för att endast returnera de artister som börjar med bokstaven 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;
Resultat:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Beställning efter Count()
Vi kan modifiera detta något så att resultatuppsättningen ordnas efter antalet. Med andra ord kan vi ordna det så att de artister som har flest album listas först och 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;
Resultat:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
Egentligen kan vi gå ett steg längre och lägga till ett alias för count()
. Detta kommer att befria oss från att behöva duplicera det i ORDER BY
klausul.
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;
Resultat:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1