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 hodnot, které nejsou null.
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í 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ášť, včetně řádků obsahujících nulové hodnoty.
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 tématu KLAUZULE OVER.
Návratové typy
Vrátí hodnotu int NOT NULL , pokud
ANSI_WARNINGSjeON. SQL Server však vždy považujeCOUNTvýrazy za int NULL v metadatech, pokud nejsou zabaleny .ISNULLVrátí hodnotu INT NULL , pokud
ANSI_WARNINGSjeOFF.
Poznámky
COUNT(*) bez GROUP BY vrácení kardinality (počet řádků) v sadě výsledků. Tento počet zahrnuje řádky, které mají všechny NULL hodnoty a duplicity.
COUNT(*) vrátí GROUP BY počet řádků v každé skupině. Tento počet zahrnuje NULL hodnoty a duplicity.
COUNT(ALL <expression>) vyhodnotí výraz pro každý řádek ve skupině a vrátí počet hodnot, které nejsou null.
COUNT(DISTINCT <expression>) vyhodnotí výraz pro každý řádek ve skupině a vrátí počet jedinečných hodnot, které nejsou null.
Deterministické a nedeterministické použití
COUNT_BIG je deterministická funkce při použití bezOVER klauzulí a ORDER BY klauzulí.
COUNT_BIG je nedeterministický při použití sOVER klauzulemi a ORDER BY klauzulemi.
Použití OVER a ORDER BY klauzule |
Deterministický |
|---|---|
| Ne | Ano |
| Ano | Ne |
Další informace naleznete v tématu Deterministické a nedeterministické funkce.
ARITHABORT a ANSI_WARNINGS
Pokud
COUNTvrátí hodnotu, která překročí maximální hodnotu int (231–1 nebo 2 147 483 647), funkce selže kvůli celočíselnému přetečení.Pokud
COUNTpřetečení a oběARITHABORTmožnostiANSI_WARNINGSjsouOFF,COUNTvrátí .NULLV opačném případě dotazARITHABORTpřeruší neboANSI_WARNINGSONpřeruší a vyvolá chybu aritmetické přetečení:Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int.Pokud chcete tyto velké výsledky správně zpracovat, použijte místo toho COUNT_BIG , což vrací bigint.
V obou
ARITHABORTpřípadechANSI_WARNINGSONmůžete bezpečně zabalitCOUNTwebyISNULL( <count-expr>, 0)volání, aby bylo možné převést typ výrazu na hodnotu NOT NULL místo hodnoty INT NULL.ISNULLZabaleníCOUNTznamená, že jakákoli chyba přetečení je bezobslužně potlačena, což by mělo být považováno za správnost.
Příklady
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití funkce COUNT a DISTINCT
Tento příklad vrátí počet různých pracovních pozic v HumanResources.Employee tabulce, kterou může zaměstnanec uchovávat.
SELECT COUNT(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO
Tady je soubor výsledků.
-----------
67
B. Použití FUNKCE COUNT(*)
Tento příklad vrátí celkový počet zaměstnanců v HumanResources.Employee tabulce.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Tady je soubor výsledků.
-----------
290
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.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Tady je soubor výsledků.
------ ---------------------
14 3472.1428
D. Použití klauzule OVER
Tento příklad používá funkce MIN, a AVGMAXCOUNT funkce s OVER klauzulí k vrácení agregovaných hodnot pro každé oddělení v HumanResources.Department tabulce.
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;
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
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