SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Kombinieren Sie SQLite Count() mit GROUP BY, um Ihrem Resultset eine „Count“-Spalte hinzuzufügen

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