Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
Den här funktionen returnerar antalet objekt som finns i en grupp.
COUNT fungerar som funktionen COUNT_BIG . Dessa funktioner skiljer sig bara åt i datatyperna för deras returvärden.
COUNT returnerar alltid ett värde för int-datatyp .
COUNT_BIG returnerar alltid ett värde för storint datatyp.
Transact-SQL syntaxkonventioner
Syntax
Syntax för sammansättningsfunktion
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Analysfunktionssyntax
COUNT ( [ ALL ] { expression | * } ) OVER ( [ <partition_by_clause> ] )
Argumentpunkter
ALLA
Tillämpar aggregeringsfunktionen på alla värden. ALLA fungerar som standard.
SÄRSKILD
Anger som COUNT returnerar antalet unika icke-inullade värden.
uttryck
Ett uttryck av valfri typ, förutom bild, ntext eller text.
COUNT stöder inte aggregerade funktioner eller underfrågor i ett uttryck.
*
Anger som COUNT ska räkna alla rader för att fastställa det totala antalet tabellrader som ska returneras.
COUNT(*) tar inga parametrar och stöder inte användningen av DISTINCT.
COUNT(*) kräver ingen uttrycksparameter eftersom den per definition inte använder information om någon viss kolumn.
COUNT(*) returnerar antalet rader i en angiven tabell och bevarar dubblettrader. Varje rad räknas separat. Detta inkluderar rader som innehåller null-värden.
ÖVER ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
Partition_by_clause delar upp resultatuppsättningen FROM som genereras av -satsen i partitioner som COUNT funktionen tillämpas på. Om det inte anges behandlar funktionen alla rader i frågeresultatuppsättningen som en enda grupp. Den order_by_clause avgör åtgärdens logiska ordning. Mer information finns i OVER-satsen (Transact-SQL).
Returtyper
int NOT NULL when
ANSI_WARNINGSisON, however SQL Server will always treatCOUNTexpressions asint NULLin metadata, unless wrapped inISNULL.int NULL när
ANSI_WARNINGSärOFF.
Anmärkningar
-
COUNT(*)utanGROUP BYreturnerar kardinaliteten (antalet rader) i resultatuppsättningen. Detta inkluderar rader som består av allaNULLvärden och dubbletter. -
COUNT(*)medGROUP BYreturnerar antalet rader i varje grupp. Detta inkluderarNULLvärden och dubbletter. -
COUNT(ALL <expression>)utvärderar uttryck för varje rad i en grupp och returnerar antalet icke-inullade värden. -
COUNT(DISTINCT <expression>)utvärderar uttryck för varje rad i en grupp och returnerar antalet unika, icke-inullade värden.
COUNT är en deterministisk funktion när den används utan OVER- och ORDER BY-satserna. Det är nondeterministiskt när det används med OVER- och ORDER BY-satserna. Mer information finns i deterministiska och icke-terministiska funktioner.
ARITHABORT och ANSI_WARNINGS
När COUNT har ett returvärde som överstiger det maximala värdet för int (dvs. 231–1 eller 2 147 483 647) COUNT misslyckas funktionen på grund av ett heltalsspill. När COUNT spill och bådeARITHABORT alternativen och ANSI_WARNINGS är OFF, COUNT returneras NULL. Annars avbryts frågan när någon av ARITHABORT eller ANSI_WARNINGS är ONoch det aritmetiska spillfelet Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int. genereras. Om du vill hantera dessa stora resultat korrekt använder du COUNT_BIG i stället, vilket returnerar bigint.
När både ARITHABORT och ANSI_WARNINGS är ONkan du på ett säkert sätt omsluta COUNT anropswebbplatser för ISNULL( <count-expr>, 0 ) att tvinga uttryckets typ till int NOT NULL i stället för int NULL. Omslutning COUNT i ISNULL innebär att eventuella spillfel ignoreras tyst, vilket bör övervägas för korrekthet.
Exempel
A. Använda COUNT och DISTINCT
Det här exemplet returnerar antalet olika titlar som en adventure works cycles-anställd kan inneha.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
Här är resultatet.
-----------
67
(1 row(s) affected)
B. Använd COUNT(*)
Det här exemplet returnerar det totala antalet anställda i Adventure Works Cycles.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Här är resultatet.
-----------
290
(1 row(s) affected)
C. Använd COUNT(*) med andra aggregeringar
Det här exemplet visar att COUNT(*) fungerar med andra mängdfunktioner i SELECT listan. I exemplet används databasen AdventureWorks2022.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Här är resultatet.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
D. Använd OVER-satsen
I det MINhär exemplet används funktionerna , MAXAVG och COUNT med OVER -satsen för att returnera aggregerade värden för varje avdelning i databastabellen 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;
Här är resultatet.
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)
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Använda COUNT och DISTINCT
Det här exemplet returnerar antalet olika titlar som en anställd på ett visst företag kan inneha.
USE ssawPDW;
SELECT COUNT(DISTINCT Title)
FROM dbo.DimEmployee;
Här är resultatet.
-----------
67
F. Använd COUNT(*)
Det här exemplet returnerar det totala antalet rader i dbo.DimEmployee tabellen.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Här är resultatet.
-------------
296
G. Använd COUNT(*) med andra aggregeringar
Det här exemplet kombineras COUNT(*) med andra mängdfunktioner i SELECT listan. Det returnerar antalet försäljningsrepresentanter med en årlig försäljningskvot som är större än 500 000 USD och den genomsnittliga försäljningskvoten för dessa försäljningsrepresentanter.
USE ssawPDW;
SELECT COUNT(EmployeeKey) AS TotalCount, AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000 AND CalendarYear = 2001;
Här är resultatet.
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. Använda COUNT med HAVING
I det HAVING här exemplet används COUNT med -satsen för att returnera avdelningarna i ett företag, som var och en har fler än 15 anställda.
USE ssawPDW;
SELECT DepartmentName,
COUNT(EmployeeKey)AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Här är resultatet.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Jag. Använda COUNT med OVER
Det här exemplet använder COUNT med OVER -satsen för att returnera antalet produkter som ingår i var och en av de angivna försäljningsorder.
USE ssawPDW;
SELECT DISTINCT COUNT(ProductKey) OVER(PARTITION BY SalesOrderNumber) AS ProductCount
, SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115',N'SO55981');
Här är resultatet.
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981