Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
Met deze functie wordt het aantal items in een groep geretourneerd.
COUNT werkt als de functie COUNT_BIG . Deze functies verschillen alleen in de gegevenstypen van hun retourwaarden.
COUNTretourneert altijd een int-gegevenstypewaarde.
COUNT_BIG retourneert altijd een waarde voor het gegevenstype bigint .
Transact-SQL syntaxis-conventies
Syntaxis
Syntaxis van aggregatiefunctie
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Syntaxis van analysefunctie
COUNT ( [ ALL ] { expression | * } ) OVER ( [ <partition_by_clause> ] )
Argumenten
ALLE
Hiermee past u de statistische functie toe op alle waarden. ALL fungeert als de standaardwaarde.
ONDERSCHEIDEND
Hiermee geeft u op dat COUNT het aantal unieke niet-ullwaarden wordt geretourneerd.
expressie
Een expressie van elk type, met uitzondering van afbeelding, ntext of tekst.
COUNT biedt geen ondersteuning voor statistische functies of subquery's in een expressie.
*
Hiermee geeft u op dat COUNT alle rijen moeten worden geteld om het totale aantal tabelrijen te bepalen dat moet worden geretourneerd.
COUNT(*) gebruikt geen parameters en biedt geen ondersteuning voor het gebruik van DISTINCT.
COUNT(*) vereist geen expressieparameter omdat deze per definitie geen informatie over een bepaalde kolom gebruikt.
COUNT(*) retourneert het aantal rijen in een opgegeven tabel en behoudt dubbele rijen. Elke rij wordt afzonderlijk geteld. Dit omvat rijen die null-waarden bevatten.
OVER ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
De partition_by_clause verdeelt de resultatenset die door de FROM component wordt geproduceerd in partities waarop de COUNT functie wordt toegepast. Als deze niet is opgegeven, behandelt de functie alle rijen van de queryresultatenset als één groep. De order_by_clause bepaalt de logische volgorde van de bewerking. Zie OVER-component (Transact-SQL) voor meer informatie.
Retourtypen
int NOT NULL wanneer
ANSI_WARNINGSisON, maar SQL Server behandeltCOUNTaltijd expressies alsint NULLin metagegevens, tenzij verpakt inISNULL.int NULL wanneer
ANSI_WARNINGSisOFF.
Opmerkingen
-
COUNT(*)zonderGROUP BYde kardinaliteit (aantal rijen) in de resultatenset te retourneren. Dit omvat rijen die bestaan uit alleNULLwaarden en duplicaten. -
COUNT(*)metGROUP BYgeeft als resultaat het aantal rijen in elke groep. Dit omvatNULLwaarden en duplicaten. -
COUNT(ALL <expression>)evalueert de expressie voor elke rij in een groep en retourneert het aantal niet-ullwaarden. -
COUNT(DISTINCT <expression>)evalueert expressies voor elke rij in een groep en retourneert het aantal unieke, niet-ullwaarden.
COUNT is een deterministische functie wanneer deze wordt gebruikt zonder de OVER- en ORDER BY-componenten. Het is niet-deterministisch wanneer deze wordt gebruikt met de OVER- en ORDER BY-componenten. Zie Deterministische en niet-deterministische functiesvoor meer informatie.
ARITHABORT en ANSI_WARNINGS
Wanneer COUNT een retourwaarde de maximumwaarde van int overschrijdt (dat wil gezegd: 231-1 of 2.147.483.647), mislukt de COUNT functie vanwege een overloop van een geheel getal. Wanneer COUNT overloop en zowel de opties als de ARITHABORT opties ANSI_WARNINGS zijn OFF, COUNT wordt geretourneerd NULL. Als dit nietARITHABORTANSI_WARNINGS het geval is ON, wordt de query afgebroken en wordt de rekenkundige overloopfout Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int. gegenereerd. Als u deze grote resultaten correct wilt afhandelen, gebruikt COUNT_BIG u in plaats daarvan, dat bigint retourneert.
Als beide ARITHABORT en ANSI_WARNINGS beide zijnON, kunt u oproepsites ISNULL( <count-expr>, 0 ) veilig verpakken COUNT om het type van de expressie te int NOT NULL dwingen in plaats van int NULL.
COUNT
ISNULL Inpakken betekent dat elke overloopfout op de achtergrond wordt onderdrukt, wat moet worden overwogen voor juistheid.
Voorbeelden
Eén. AANTAL en DISTINCT gebruiken
In dit voorbeeld wordt het aantal verschillende titels geretourneerd dat een werknemer Adventure Works Cycles kan bevatten.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
Hier is het resultatenoverzicht.
-----------
67
(1 row(s) affected)
B. AANTAL(*) gebruiken
In dit voorbeeld wordt het totale aantal werknemers van Adventure Works Cycles geretourneerd.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Hier is het resultatenoverzicht.
-----------
290
(1 row(s) affected)
C. COUNT(*) gebruiken met andere aggregaties
In dit voorbeeld ziet u dat COUNT(*) dit werkt met andere statistische functies in de SELECT lijst. In het voorbeeld wordt de Database AdventureWorks2022 gebruikt.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Hier is het resultatenoverzicht.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
D. De OVER-clausule gebruiken
In dit voorbeeld worden de MIN, AVGMAXen COUNT functies met de OVER component gebruikt om geaggregeerde waarden te retourneren voor elke afdeling in de databasetabel HumanResources.Department AdventureWorks2022.
SELECT DISTINCT Name
, MIN(Rate) OVER (PARTITION BY edh.DepartmentID) AS MinSalary
, MAX(Rate) OVER (PARTITION BY edh.DepartmentID) AS MaxSalary
, AVG(Rate) OVER (PARTITION BY edh.DepartmentID) AS AvgSalary
, COUNT(edh.BusinessEntityID) OVER (PARTITION BY edh.DepartmentID) AS EmployeesPerDept
FROM HumanResources.EmployeePayHistory AS eph
JOIN HumanResources.EmployeeDepartmentHistory AS edh
ON eph.BusinessEntityID = edh.BusinessEntityID
JOIN HumanResources.Department AS d
ON d.DepartmentID = edh.DepartmentID
WHERE edh.EndDate IS NULL
ORDER BY Name;
Hier is het resultatenoverzicht.
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
(16 row(s) affected)
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
E. AANTAL en DISTINCT gebruiken
In dit voorbeeld wordt het aantal verschillende titels geretourneerd dat een werknemer van een specifiek bedrijf kan bevatten.
USE ssawPDW;
SELECT COUNT(DISTINCT Title)
FROM dbo.DimEmployee;
Hier is het resultatenoverzicht.
-----------
67
F. AANTAL(*) gebruiken
In dit voorbeeld wordt het totale aantal rijen in de dbo.DimEmployee tabel geretourneerd.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Hier is het resultatenoverzicht.
-------------
296
G. COUNT(*) gebruiken met andere aggregaties
In dit voorbeeld worden COUNT(*) andere statistische functies in de SELECT lijst gecombineerd. Het retourneert het aantal verkoopvertegenwoordigers met een jaarlijks verkoopquotum dat groter is dan $ 500.000 en het gemiddelde verkoopquotum van deze verkoopvertegenwoordigers.
USE ssawPDW;
SELECT COUNT(EmployeeKey) AS TotalCount, AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000 AND CalendarYear = 2001;
Hier is het resultatenoverzicht.
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. COUNT gebruiken met HAVING
In dit voorbeeld wordt COUNT gebruikgemaakt van de HAVING component om de afdelingen van een bedrijf te retourneren, die elk meer dan 15 werknemers hebben.
USE ssawPDW;
SELECT DepartmentName,
COUNT(EmployeeKey)AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Hier is het resultatenoverzicht.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Ik. COUNT gebruiken met OVER
In dit voorbeeld wordt COUNT gebruikgemaakt van de OVER component om het aantal producten in elk van de opgegeven verkooporders te retourneren.
USE ssawPDW;
SELECT DISTINCT COUNT(ProductKey) OVER(PARTITION BY SalesOrderNumber) AS ProductCount
, SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115',N'SO55981');
Hier is het resultatenoverzicht.
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981