Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Tato funkce vrátí počet položek nalezených ve skupině.
COUNT funguje jako funkce COUNT_BIG . Tyto funkce se liší pouze v datových typech jejich návratových hodnot.
COUNT vždy vrátí hodnotu int datového typu.
COUNT_BIG vždy vrátí hodnotu datového typu bigint .
Syntaxe
Syntaxe agregační funkce
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Syntaxe analytické funkce
COUNT ( [ ALL ] { expression | * } ) OVER ( [ <partition_by_clause> ] )
Argumenty
VŠICHNI
Použije agregační funkci na všechny hodnoty. All slouží jako výchozí.
ODLIŠNÝ
Určuje, že COUNT vrátí počet jedinečných nenulových hodnot.
výrazu
Výraz libovolného typu s výjimkou obrázku, ntextu nebo textu.
COUNT nepodporuje agregační funkce ani poddotazy ve výrazu.
*
Určuje, že se má spočítat všechny řádky, COUNT aby bylo možné určit celkový počet řádků tabulky, který se má vrátit.
COUNT(*) nepřijímá žádné parametry a nepodporuje použití funkce DISTINCT.
COUNT(*) nevyžaduje parametr výrazu , protože podle definice nepoužívá informace o žádném konkrétním sloupci.
COUNT(*) vrátí počet řádků v zadané tabulce a zachová duplicitní řádky. Počítá každý řádek zvlášť. To zahrnuje řádky, které obsahují hodnoty null.
KONEC ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
Partition_by_clause rozdělí sadu výsledků vytvořenou FROM klauzulí na oddíly, na které COUNT se funkce použije. Pokud není zadáno, funkce zachází se všemi řádky sady výsledků dotazu jako s jednou skupinou.
Order_by_clause určuje logické pořadí operace. Další informace najdete v části OVER – klauzule (Transact-SQL).
Návratové typy
int NOT NULL pokud
ANSI_WARNINGSjeONvšak SQL Server bude vždy považovatCOUNTvýrazy jakoint NULLv metadatech, pokud není zabalenoISNULL.int NULL , pokud
ANSI_WARNINGSjeOFF.
Poznámky
-
COUNT(*)bezGROUP BYvrácení kardinality (počet řádků) v sadě výsledků. To zahrnuje řádky, které se skládají z hodnot all aNULLduplicit. -
COUNT(*)vrátíGROUP BYpočet řádků v každé skupině. To zahrnujeNULLhodnoty a duplicity. -
COUNT(ALL <expression>)vyhodnotí výraz pro každý řádek ve skupině a vrátí počet nenulových hodnot. -
COUNT(DISTINCT <expression>)vyhodnotí výraz pro každý řádek ve skupině a vrátí počet jedinečných nenulových hodnot.
COUNT je deterministická funkce při použití bez klauzulí OVER a ORDER BY. Při použití s klauzulí OVER a ORDER BY je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.
ARITHABORT a ANSI_WARNINGS
Pokud COUNT má vrácenou hodnotu překračující maximální hodnotu int (tj. 231–1 nebo 2 147 483 647), COUNT funkce selže kvůli celočíselnému přetečení. Při COUNT přetečení a oběARITHABORT možnosti ANSI_WARNINGS jsou OFF, COUNT vrátí .NULL V opačném případě se ARITHABORTANSI_WARNINGSONdotaz přeruší a vyvolá se chyba Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int. aritmetické přetečení. Chcete-li tyto velké výsledky správně zpracovat, použijte COUNT_BIG místo toho, abyste vrátili bigint.
Pokud jsou oba ARITHABORT a ANSI_WARNINGS jsou ON, můžete bezpečně zabalit COUNT call-sites do ISNULL( <count-expr>, 0 ) , aby se typ int NOT NULL výrazu místo int NULL.
COUNT Zabalení ISNULL znamená, že jakákoli chyba přetečení bude bezobslužně potlačena, což by mělo být považováno za správnost.
Příklady
A. Použití funkce COUNT a DISTINCT
Tento příklad vrátí počet různých titulů, které může zaměstnanec Adventure Works Cycles uchovávat.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
Tady je soubor výsledků.
-----------
67
(1 row(s) affected)
B. Použití FUNKCE COUNT(*)
Tento příklad vrátí celkový počet zaměstnanců Adventure Works Cycles.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Tady je soubor výsledků.
-----------
290
(1 row(s) affected)
C. Použití funkce COUNT(*) s jinými agregacemi
Tento příklad ukazuje, že COUNT(*) funguje s dalšími agregačními funkcemi v SELECT seznamu. Příklad využívá databázi AdventureWorks2025.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Tady je soubor výsledků.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
D. Použití klauzule OVER
Tento příklad používá , , a COUNT funkce s klauzulí OVER , které vracejí agregované hodnoty pro každé oddělení v databázové tabulce AdventureWorks2025HumanResources.Department. AVGMAXMIN
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;
Tady je soubor výsledků.
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)
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
E. Použití funkce COUNT a DISTINCT
Tento příklad vrátí počet různých titulů, které může mít zaměstnanec konkrétní společnosti.
USE ssawPDW;
SELECT COUNT(DISTINCT Title)
FROM dbo.DimEmployee;
Tady je soubor výsledků.
-----------
67
F. Použití FUNKCE COUNT(*)
Tento příklad vrátí celkový počet řádků v dbo.DimEmployee tabulce.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Tady je soubor výsledků.
-------------
296
G. Použití funkce COUNT(*) s jinými agregacemi
Tento příklad kombinuje COUNT(*) s dalšími agregačními funkcemi SELECT v seznamu. Vrátí počet zástupců prodeje s roční kvótou prodeje větší než 500 000 USD a průměrnou prodejní kvótou těchto zástupců prodeje.
USE ssawPDW;
SELECT COUNT(EmployeeKey) AS TotalCount, AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000 AND CalendarYear = 2001;
Tady je soubor výsledků.
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. Použití funkce COUNT s VYUŽITÍM FUNKCE HAVING
Tento příklad používá COUNT s HAVING klauzulí k vrácení oddělení společnosti, z nichž každý má více než 15 zaměstnanců.
USE ssawPDW;
SELECT DepartmentName,
COUNT(EmployeeKey)AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Tady je soubor výsledků.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Já. Použití funkce COUNT s over
Tento příklad používá COUNT s OVER klauzulí k vrácení počtu produktů obsažených v každé zadané prodejní objednávce.
USE ssawPDW;
SELECT DISTINCT COUNT(ProductKey) OVER(PARTITION BY SalesOrderNumber) AS ProductCount
, SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115',N'SO55981');
Tady je soubor výsledků.
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981