Wenn Sie bei der Verwendung von SQLite eine „count“-Spalte zur Ergebnismenge einer Datenbankabfrage hinzufügen müssen, können Sie count()
verwenden Funktion zur Bereitstellung der Anzahl und GROUP BY
-Klausel, um die Spalte anzugeben, für die die Ergebnisse gruppiert werden sollen.
Beispiel
Hier ist ein kurzes Beispiel zur Veranschaulichung.
SELECT ArtistId, count(Title)
FROM Album
GROUP BY ArtistId
LIMIT 10;
Ergebnis:
ArtistId count(Title) ---------- ------------ 1 2 2 2 3 1 4 1 5 1 6 2 7 1 8 3 9 1 10 1
In diesem Fall ist die ID jedes Künstlers in der ArtistId aufgeführt Spalte und die Anzahl der Alben für diesen Künstler wird in count(Title) aufgeführt Spalte.
Um dies etwas leichter lesbar zu machen, hier ist eine ähnliche Abfrage, aber dieses Mal gebe ich den Namen des Künstlers statt der ID zurück. Ich tue dies, indem ich eine innere Verbindung mit dem Künstler durchführe Tabelle.
In diesem Fall füge ich ein WHERE
hinzu Klausel, um nur die Interpreten zurückzugeben, die mit dem Buchstaben D beginnen .
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;
Ergebnis:
Name count(al.Title) --------------- --------------- David Coverdale 1 Deep Purple 11 Def Leppard 1 Dennis Chambers 1 Djavan 2 Dread Zeppelin 1
Ordnen nach Anzahl()
Wir können dies leicht ändern, sodass die Ergebnismenge nach der Anzahl geordnet wird. Mit anderen Worten, wir können es so anordnen, dass die Künstler mit den meisten Alben zuerst aufgelistet werden und umgekehrt.
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;
Ergebnis:
Name count(al.Title) -------------------- --------------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1
Tatsächlich können wir noch einen Schritt weiter gehen und einen Alias für count()
hinzufügen . Dies erspart uns, das im ORDER BY
duplizieren zu müssen Klausel.
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;
Ergebnis:
Name AlbumCount -------------------- ---------- Deep Purple 11 Djavan 2 David Coverdale 1 Def Leppard 1 Dennis Chambers 1 Dread Zeppelin 1