Hvis du har brug for at tilføje en "count"-kolonne til resultatsættet af en databaseforespørgsel, når du bruger SQLite, kan du bruge count()
funktion til at angive antallet og GROUP BY
klausul for at angive den kolonne, som resultaterne skal grupperes for.
Eksempel
Her er et hurtigt eksempel at demonstrere.
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 dette tilfælde er hver kunstners ID angivet i ArtistId kolonnen, og antallet af albums for den kunstner er angivet i tæller(Titel) kolonne.
For at gøre dette lidt lettere at læse, er her en lignende forespørgsel, men denne gang returnerer jeg kunstnerens navn i stedet for ID'et. Det gør jeg ved at udføre en indre joinforbindelse med kunstneren tabel.
I dette tilfælde tilføjer jeg en WHERE
klausul for kun at returnere de kunstnere, der starter med bogstavet 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
Bestilling efter Count()
Vi kan ændre dette lidt, så resultatsættet er sorteret efter antallet. Med andre ord kan vi ordne det, så de kunstnere med flest albums vises først, og omvendt.
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
Faktisk kan vi gå et skridt videre og tilføje et alias for count()
. Dette vil fritage os fra at skulle duplikere 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