Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om 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
Magazijn in Microsoft Fabric
SQL-database 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-null-waarden 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(*) accepteert 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. Het telt elke rij apart, inclusief rijen die nullwaarden 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 voor meer informatie.
Retourtypen
Retourneert int NOT NULL wanneer
ANSI_WARNINGSdit isON. SQL Server behandeltCOUNTechter altijd expressies als int NULL in metagegevens, tenzij verpakt inISNULL.Retourneert int NULL wanneer
ANSI_WARNINGSdit isOFF.
Opmerkingen
COUNT(*) zonder GROUP BY geeft als resultaat de kardinaliteit (aantal rijen) in de resultatenset. Dit aantal omvat rijen met alle NULL waarden en duplicaten.
COUNT(*) met GROUP BY geeft als resultaat het aantal rijen in elke groep. Dit aantal omvat NULL waarden en duplicaten.
COUNT(ALL <expression>) evalueert expressies voor elke rij in een groep en retourneert het aantal niet-null-waarden.
COUNT(DISTINCT <expression>) evalueert expressies voor elke rij in een groep en retourneert het aantal unieke, niet-null-waarden.
Deterministisch en niet-deterministisch gebruik
COUNT_BIG is een deterministische functie wanneer deze wordt gebruikt zonder de OVER en ORDER BY componenten.
COUNT_BIG is niet-deterministisch wanneer deze wordt gebruikt met de OVER en ORDER BY componenten.
Maakt gebruik OVER van en ORDER BY componenten |
Deterministisch |
|---|---|
| Nee. | Yes |
| Yes | Nee. |
Zie Deterministische en niet-deterministische functiesvoor meer informatie.
ARITHABORT en ANSI_WARNINGS
Wanneer
COUNTeen waarde wordt geretourneerd die groter is dan de maximumwaarde van int (231-1 of 2.147.483.647), mislukt de functie vanwege een overloop van een geheel getal.Als
COUNToverloop en zowel de opties als deARITHABORToptiesANSI_WARNINGSzijnOFF,COUNTretourneertNULL. Als dat nietARITHABORTANSI_WARNINGShet geval isON, wordt de query afgebroken en wordt de rekenkundige overloopfout gegenereerd:Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int.Als u deze grote resultaten correct wilt afhandelen, gebruikt u in plaats daarvan COUNT_BIG , die bigint retourneert.
Als beide
ARITHABORTenANSI_WARNINGSbeide zijnON, kunt u oproepsitesISNULL( <count-expr>, 0)veilig verpakkenCOUNTom het type van de expressie te dwingen int NOT NULL in plaats van int NULL.COUNTVerpakken inISNULLbetekent dat elke overloopfout op de achtergrond wordt onderdrukt, wat moet worden overwogen voor juistheid.
Voorbeelden
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Eén. AANTAL en DISTINCT gebruiken
In dit voorbeeld wordt het aantal verschillende functietitels in de HumanResources.Employee tabel geretourneerd die een werknemer kan bevatten.
SELECT COUNT(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO
Hier is het resultatenoverzicht.
-----------
67
B. AANTAL(*) gebruiken
In dit voorbeeld wordt het totale aantal werknemers in de HumanResources.Employee tabel geretourneerd.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Hier is het resultatenoverzicht.
-----------
290
C. COUNT(*) gebruiken met andere aggregaties
In dit voorbeeld ziet u dat COUNT(*) dit werkt met andere statistische functies in de SELECT lijst.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Hier is het resultatenoverzicht.
------ ---------------------
14 3472.1428
D. De OVER-clausule gebruiken
In dit voorbeeld worden de MINfuncties , MAXen COUNTAVGfuncties met de OVER component gebruikt om geaggregeerde waarden te retourneren voor elke afdeling in de HumanResources.Department tabel.
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 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
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