Wenn Sie mit Datenbanken arbeiten, möchten Sie manchmal herausfinden, wie viele Zeilen von einer Abfrage zurückgegeben werden, ohne die Ergebnisse der Abfrage tatsächlich zurückzugeben. Oder manchmal möchten Sie einfach nur herausfinden, wie viele Zeilen eine bestimmte Tabelle enthält.
In SQL Server können Sie COUNT()
von T-SQL verwenden Funktion, um die Anzahl der Zeilen zurückzugeben, die in einer Abfrage zurückgegeben würden.
Die Daten
Hier sind die Daten, die wir in den Beispielen auf dieser Seite verwenden:
SELECT *FROM Aufgaben;
Ergebnis:
TaskId TaskName TaskDescription TaskCode------ ------------ --------------- --------1 Feed Katzen TBA null 2 Wasserhund TBA null 3 Futtergarten TBA null 4 Teppich streichen TBA null 5 Dach reinigen TBA null 6 Katzen füttern TBA null
Beispiel – Alle Zeilen in einer Tabelle zählen
Hier ist ein Beispiel für die Verwendung von COUNT()
Funktion, um die Gesamtzahl der Zeilen in einer Tabelle zurückzugeben:
SELECT COUNT(*)FROM Aufgaben;
Ergebnis:
6
Dies gibt die Anzahl der Zeilen in der Tabelle zurück, da wir keine Kriterien angegeben haben, um die Ergebnisse einzugrenzen.
Beispiel – Hinzufügen von Kriterien
Hier ist ein Beispiel für das Zählen, wie viele Zeilen basierend auf einem bestimmten Kriterium zurückgegeben würden:
SELECT COUNT(*)FROM TasksWHERE TaskName LIKE '%dog%' OR TaskName LIKE '%cat%';
Ergebnis:
3
Beispiel – Geben Sie eine einzelne Spalte an
Die vorherigen Beispiele verwenden alle ein Sternchen, um die Anzahl auf alle Spalten anzuwenden. Sie haben auch die Möglichkeit, eine bestimmte Spalte anzugeben.
Beispiel:
SELECT COUNT(TaskName)FROM Tasks;
Ergebnis:
6
Während dieses Beispiel das gleiche Ergebnis zurückgibt, das wir erhalten haben, als wir das Sternchen verwendet haben, muss dies nicht unbedingt immer der Fall sein. Folgendes passiert beispielsweise, wenn wir eine andere Spalte angeben:
SELECT COUNT(TaskCode)FROM Tasks;
Ergebnis:
0
In diesem Fall erhalten wir Null, weil diese bestimmte Spalte in jeder Zeile Nullwerte enthält.
Beispiel – Eindeutig
Sie können den DISTINCT
hinzufügen Argument, um nur die Anzahl der eindeutigen (nicht null) Werte zurückzugeben.
Sie haben vielleicht bemerkt, dass jede Zeile in unserer TaskDescription
Spalte enthält denselben Wert („TBA“). Und der TaskName
Spalte hat auch einen doppelten Wert („Katzen füttern“ erscheint zweimal). Dies kann zu Problemen führen, wenn Sie nicht möchten, dass Duplikate gezählt werden.
So sieht es aus, wenn wir den DISTINCT
anwenden -Argument für TaskName
Spalte:
SELECT COUNT(DISTINCT TaskName)FROM Tasks;
Ergebnis:
5
Und hier wird es gegen die TaskDescription
angewendet Tabelle (wobei alle Werte identisch sind):
SELECT COUNT(DISTINCT TaskDescription)FROM Tasks;
Ergebnis:
1
Beispiel – Die HAVING-Klausel
Sie können auch COUNT()
verwenden mit dem HAVING
-Klausel, um eine Ergebnismenge basierend auf der Anzahl der zurückgegebenen Zeilen einzuschränken.
Beispiel:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Alben al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 1;Ergebnis:
ArtistName Album Count-------------------- -----------Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael lernt zu rocken 3 Tom Jones 3Dieses Beispiel verwendet eine andere Datenbank als die vorherigen Beispiele. Es gibt nur die Künstler zurück, die mehr als 1 Album veröffentlicht haben. Wir könnten diese Zahl beliebig oft ändern:
USE Music;SELECT ar.ArtistName, COUNT(al.AlbumName) 'Album Count'FROM Artists arINNER JOIN Alben al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT(al.AlbumName)> 4;Ergebnis:
Künstlername Albumanzahl-------------------- -----------Iron Maiden 5Die COUNT_BIG()-Funktion
T-SQL hat auch ein
COUNT_BIG()
Funktion, die genauso funktioniert wieCOUNT()
, außer dassCOUNT()
gibt ein int zurück Datentyp undCOUNT_BIG()
gibt ein bigint zurück Datentyp.Diese Funktion kann für indizierte Ansichten mit gruppierten Abfragen nützlich sein. Sie werden möglicherweise feststellen, dass Sie versuchen, einen Index für eine Ansicht zu erstellen, die
COUNT(*)
enthält , dass Sie einen Fehler wie diesen erhalten:Der Index für die Ansicht "Music.dbo.AlbumsByArtist" kann nicht erstellt werden, da er das Aggregat COUNT verwendet. Verwenden Sie stattdessen COUNT_BIG.Ändern Sie in solchen Fällen die Ansicht, um
COUNT_BIG(*)
zu verwenden sollte das Problem lösen.