Als u een "count"-kolom moet toevoegen aan de resultatenset van een databasequery wanneer u SQLite gebruikt, kunt u de count()
gebruiken functie om de telling te geven, en de GROUP BY
om de kolom op te geven waarvoor de resultaten moeten worden gegroepeerd.
Voorbeeld
Hier is een snel voorbeeld om te demonstreren.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Resultaat:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
In dit geval wordt de ID van elke artiest vermeld in de ArtistId kolom, en het aantal albums voor die artiest wordt vermeld in de count(Title) kolom.
Om dit iets gemakkelijker te lezen te maken, is hier een vergelijkbare vraag, maar deze keer geef ik de naam van de artiest terug in plaats van de ID. Dit doe ik door een inner join uit te voeren met de Artiest tafel.
In dit geval voeg ik een WHERE
. toe clausule om alleen die artiesten terug te geven die beginnen met de letter 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;
Resultaat:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Bestellen op aantal()
We kunnen dit enigszins wijzigen, zodat de resultatenset wordt geordend op basis van de telling. Met andere woorden, we kunnen het zo bestellen dat de artiesten met de meeste albums als eerste worden vermeld en omgekeerd.
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;
Resultaat:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
Eigenlijk kunnen we nog een stap verder gaan en een alias toevoegen voor de count()
. Dit zal ons verlossen van het dupliceren van dat in de ORDER BY
clausule.
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;
Resultaat:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1