Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Analyseendpunkt in Microsoft Fabric
Lagerhaus in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Diese Funktion gibt die Anzahl der in einer Gruppe gefundenen Elemente zurück.
COUNT arbeitet wie die COUNT_BIG-Funktion. Diese Funktionen unterscheiden sich nur in den Datentypen ihrer Rückgabewerte.
COUNT gibt immer einen Wert vom Datentyp int zurück.
COUNT_BIG gibt immer einen Wert vom Datentyp bigint zurück.
Transact-SQL-Syntaxkonventionen
Syntax
Syntax der Aggregationsfunktion:
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Analysefunktionssyntax:
COUNT ( { [ ALL ] expression | * } ) OVER ( [ <partition_by_clause> ] )
Argumente
ALLE
Wendet die Aggregatfunktion auf alle Werte an.
ALL dient als Standard.
EINDEUTIG
Gibt an, dass COUNT die Anzahl eindeutiger Nicht-Null-Werte zurückgegeben wird.
Ausdruck
Eine expression beliebigen Typs mit Ausnahme von image, ntext oder text.
COUNT unterstützt keine Aggregatfunktionen oder Unterabfragen in einem Ausdruck.
*
Gibt an, dass COUNT alle Zeilen zählen soll, um die Gesamtzahl der zurückzugebenden Tabellenzeilen zu bestimmen.
COUNT(*) verwendet keine Parameter und unterstützt nicht die Verwendung von DISTINCT.
COUNT(*) erfordert keinen expression-Parameter, da definitionsgemäß keine Informationen zu einer bestimmten Spalte verwendet werden.
COUNT(*) gibt die Anzahl der Zeilen in einer angegebenen Tabelle zurück. Duplikate werden beibehalten. Die Funktion zählt jede Zeile separat, einschließlich der Zeilen, die null-Werte enthalten.
OVER ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ]
Das Argument partition_by_clause unterteilt das von der FROM-Klausel erzeugte Resultset in Partitionen, auf die die COUNT-Funktion angewendet wird. Wird dies nicht angegeben, verarbeitet die Funktion alle Zeilen des Abfrageresultsets als einzelne Gruppe.
order_by_clause bestimmt die logische Reihenfolge, in der der Vorgang ausgeführt wird. Weitere Informationen finden Sie unter OVER-Klausel.
Rückgabetypen
Gibt int NOT NULL zurück, wenn
ANSI_WARNINGSder Wert istON. SQL Server behandeltCOUNTausdrücke jedoch immer als int NULL in Metadaten, es sei denn, es wird inISNULLden Umbruch eingeschlossen.Gibt int NULL zurück, wenn
ANSI_WARNINGSder Wert istOFF.
Bemerkungen
COUNT(*) ohne GROUP BY die Kardinalität (Anzahl der Zeilen) im Resultset zurück. Diese Anzahl enthält Zeilen mit allen NULL Werten und Duplikaten.
COUNT(*) mit GROUP BY gibt die Anzahl der Zeilen in jeder Gruppe zurück. Diese Anzahl enthält NULL Werte und Duplikate.
COUNT(ALL <expression>) Wertet ausdrücke für jede Zeile in einer Gruppe aus und gibt die Anzahl der Nicht-NULL-Werte zurück.
COUNT(DISTINCT <expression>) Wertet ausdrücke für jede Zeile in einer Gruppe aus und gibt die Anzahl eindeutiger, nicht NULL-Werte zurück.
Deterministische und nichtdeterministische Verwendung
COUNT_BIG ist eine deterministische Funktion, wenn sie ohne die OVER Und-Klauseln ORDER BY verwendet wird.
COUNT_BIG ist nicht deterministisch , wenn sie mit den OVER Und-Klauseln ORDER BY verwendet wird.
Verwendung OVER und ORDER BY Klauseln |
Deterministisch |
|---|---|
| Nein | Yes |
| Yes | Nein |
Weitere Informationen finden Sie unter Deterministische und nicht deterministische Funktionen.
ARITHABORT und ANSI_WARNINGS
Wenn
COUNTein Wert zurückgegeben wird, der den Maximalwert von int (231-1 oder 2.147.483.647) überschreitet, schlägt die Funktion aufgrund eines ganzzahligen Überlaufs fehl.Wenn
COUNTÜberläufe und sowohl die Optionen alsANSI_WARNINGSauch dieARITHABORTÜberlaufoptionen sindOFF, wirdCOUNTzurückgegebenNULL. Andernfalls wird die Abfrage abgebrochen und löst den arithmetischen Überlauffehler aus:ARITHABORTANSI_WARNINGSONMsg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int.Um diese großen Ergebnisse korrekt zu behandeln, verwenden Sie stattdessen COUNT_BIG , die "bigint" zurückgibt.
Wenn beides
ARITHABORTistONANSI_WARNINGS, können Sie AufrufwebsitesISNULL( <count-expr>, 0)sicher umschließenCOUNT, um den Typ des Ausdrucks in "NICHT NULL" statt int NULL zu überstellen. Das UmbrechenCOUNTbedeutetISNULL, dass alle Überlauffehler im Hintergrund unterdrückt werden, die als Korrektheit betrachtet werden sollten.
Beispiele
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
Ein. Verwenden von COUNT und DISTINCT
In diesem Beispiel wird die Anzahl der verschiedenen Stellentitel in der Tabelle zurückgegeben, die HumanResources.Employee ein Mitarbeiter enthalten kann.
SELECT COUNT(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO
Hier sehen Sie das Ergebnis.
-----------
67
B. Verwenden von COUNT(*)
In diesem Beispiel wird die Gesamtzahl der Mitarbeiter in der HumanResources.Employee Tabelle zurückgegeben.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Hier sehen Sie das Ergebnis.
-----------
290
C. Verwenden von COUNT(*) mit weiteren Aggregaten
Dieses Beispiel zeigt, dass COUNT(*) mit anderen Aggregatfunktionen in der SELECT-Liste funktioniert.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Hier sehen Sie das Ergebnis.
------ ---------------------
14 3472.1428
D: Verwenden der OVER-Klausel
In diesem Beispiel werden die , , und COUNT Funktionen mit der OVER Klausel verwendet, um aggregierte Werte für jede Abteilung in der HumanResources.Department Tabelle zurückzugeben. AVGMAXMIN
SELECT DISTINCT d.Name,
MIN(eph.Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary,
MAX(eph.Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary,
AVG(eph.Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary,
COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
INNER JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON eph.BusinessEntityID = edh.BusinessEntityID
INNER JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY d.Name;
Hier sehen Sie das Ergebnis.
Name MinSalary MaxSalary AvgSalary EmployeesPerDept
---------------------------- ----------- ----------- ----------- -----------------
Document Control 10.25 17.7885 14.3884 5
Engineering 32.6923 63.4615 40.1442 6
Executive 39.06 125.50 68.3034 4
Facilities and Maintenance 9.25 24.0385 13.0316 7
Finance 13.4615 43.2692 23.935 10
Human Resources 13.9423 27.1394 18.0248 6
Information Services 27.4038 50.4808 34.1586 10
Marketing 13.4615 37.50 18.4318 11
Production 6.50 84.1346 13.5537 195
Production Control 8.62 24.5192 16.7746 8
Purchasing 9.86 30.00 18.0202 14
Quality Assurance 10.5769 28.8462 15.4647 6
Research and Development 40.8654 50.4808 43.6731 4
Sales 23.0769 72.1154 29.9719 18
Shipping and Receiving 9.00 19.2308 10.8718 6
Tool Design 8.62 29.8462 23.5054 6
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
E. Verwenden von COUNT und DISTINCT
Dieses Beispiel gibt die Anzahl der verschiedenen Positionen zurück, die ein Mitarbeiter eines bestimmten Unternehmens innehaben kann.
USE ssawPDW;
SELECT COUNT(DISTINCT Title)
FROM dbo.DimEmployee;
Hier sehen Sie das Ergebnis.
-----------
67
F. Verwenden von COUNT(*)
In diesem Beispiel wird die Gesamtzahl der Zeilen in der dbo.DimEmployee-Tabelle zurückgegeben.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Hier sehen Sie das Ergebnis.
-------------
296
G. Verwenden von COUNT(*) mit weiteren Aggregaten
Dieses Beispiel vereint COUNT(*) mit weiteren Aggregatfunktionen in der SELECT-Liste. Es gibt die Anzahl der Vertriebsmitarbeiter mit einer jährlichen Sollvorgabe für den Verkauf von über 500.000 USD und die durchschnittliche Sollvorgabe dieser Vertriebsmitarbeiter für den Verkauf zurück.
USE ssawPDW;
SELECT COUNT(EmployeeKey) AS TotalCount,
AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000
AND CalendarYear = 2001;
Hier sehen Sie das Ergebnis.
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. Verwenden von COUNT mit HAVING
Dieses Beispiel verwendet COUNT mit der HAVING-Klausel, um die Abteilungen einer Firma zurückzugeben, von denen jede mehr als 15 Mitarbeiter aufweist.
USE ssawPDW;
SELECT DepartmentName,
COUNT(EmployeeKey) AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Hier sehen Sie das Ergebnis.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Ich. Verwenden von COUNT mit OVER
In diesem Beispiel wird COUNT mit der OVER-Klausel verwendet, um die Anzahl der enthaltenen Produkte für jeden der angegebenen Verkaufsaufträge zurückzugeben.
USE ssawPDW;
SELECT DISTINCT COUNT(ProductKey) OVER (PARTITION BY SalesOrderNumber) AS ProductCount,
SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115', N'SO55981');
Hier sehen Sie das Ergebnis.
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981