Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So geben Sie die Anzahl der Zeilen in einem Abfrageergebnis in SQL Server zurück

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 3

Dieses 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 5

Die COUNT_BIG()-Funktion

T-SQL hat auch ein COUNT_BIG() Funktion, die genauso funktioniert wie COUNT() , außer dass COUNT() gibt ein int zurück Datentyp und COUNT_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.