Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Ez a függvény a csoportban található elemek számát adja vissza.
COUNT a COUNT_BIG függvényhez hasonlóan működik. Ezek a függvények csak a visszatérési értékek adattípusaiban különböznek.
COUNT mindig egy int adattípus-értéket ad vissza.
COUNT_BIG mindig nagy adattípus-értéket ad vissza.
Transact-SQL szintaxis konvenciók
Szemantika
Aggregációs függvény szintaxisa:
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Elemzési függvény szintaxisa:
COUNT ( { [ ALL ] expression | * } ) OVER ( [ <partition_by_clause> ] )
Érvek
Összes
Az összesítő függvény alkalmazása az összes értékre.
ALL alapértelmezettként szolgál.
KÜLÖNBÖZŐ
COUNT Az egyedi nem null értékek számát adja vissza.
kifejezés
Bármilyen típusú kifejezés , kivéve a képet, az ntextet vagy a szöveget.
COUNT nem támogatja a kifejezések összesítő függvényét vagy al lekérdezését.
*
Megadja, hogy COUNT az összes sort meg kell számolnia a visszaadni kívánt táblasorok teljes számának meghatározásához.
COUNT(*) nem használ paramétereket, és nem támogatja DISTINCTa .
COUNT(*) nem igényel kifejezésparamétert , mert definíció szerint nem használ adatokat egyetlen oszlopról sem.
COUNT(*) Egy adott tábla sorainak számát adja vissza, és megőrzi az ismétlődő sorokat. Minden sort külön-külön számol, beleértve azokat a sorokat is, amelyek nullértékeket tartalmaznak.
VÉGE ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
A partition_by_clause a záradék által FROM létrehozott eredményhalmazt partíciókra osztja, amelyekre a COUNT függvényt alkalmazza. Ha nincs megadva, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli. A order_by_clause határozza meg a művelet logikai sorrendjét. További információ: OVER záradék.
Visszatérési típusok
A NOT NULL értéket adja vissza, ha
ANSI_WARNINGSaz .ONAz SQL Server azonban a metaadatokban mindig null értékű kifejezésként kezeliCOUNTa kifejezéseket, kivéve, ha be van csomagolva.ISNULLNull értéket ad vissza, ha
ANSI_WARNINGSaz .OFF
Megjegyzések
COUNT(*) az GROUP BY eredményhalmaz számosságát (sorok számát) adja vissza. Ez a szám az összes NULL értéket és ismétlődést tartalmazó sorokat is tartalmazza.
COUNT(*) az GROUP BY egyes csoportok sorainak számát adja vissza. Ez a szám magában foglalja az NULL értékeket és az ismétlődéseket.
COUNT(ALL <expression>) kiértékeli a csoport minden sorához tartozó kifejezést , és visszaadja a nem null értékek számát.
COUNT(DISTINCT <expression>) kiértékeli a csoport minden sorához tartozó kifejezést , és visszaadja az egyedi, nem null értékek számát.
Determinisztikus és nem determinisztikus használat
COUNT_BIG
determinisztikus függvény, ha a záradékok és ORDER BY a OVER záradékok nélkül használják.
COUNT_BIG
nemdeterminista, ha a OVERzáradékokkal együtt ORDER BY használják.
Felhasználások OVER és ORDER BY záradékok |
Determinisztikus |
|---|---|
| Nem | Igen |
| Igen | Nem |
További információ: Determinisztikus és nem determinisztikus függvények.
ARITHABORT és ANSI_WARNINGS
Ha
COUNTolyan értéket ad vissza, amely meghaladja az int maximális értékét (231-1 vagy 2 147 483 647), a függvény egy egész szám túlcsordulása miatt meghiúsul.Ha
COUNTa túlcsordulások, valamint a lehetőségek ésANSI_WARNINGSaARITHABORTlehetőségek is,OFFCOUNTakkor a visszaadottNULLérték. Ellenkező esetben aARITHABORTANSI_WARNINGSONlekérdezés megszakítja és növeli az aritmetikai túlcsordulási hibát:Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int.A nagy eredmények helyes kezeléséhez használja inkább a COUNT_BIG , amely nagyot ad vissza.
Ha mindkettő
ARITHABORTANSI_WARNINGSés így vanON, biztonságosan befuttathatjaCOUNTa híváshelyeketISNULL( <count-expr>, 0), hogy a kifejezés típusát a NOT NULL értékre kényszerítse az int NULL helyett. A körbefuttatásCOUNTazt jelenti, hogy a túlcsordulási hibák csendbenISNULLel lesznek tiltva, és ezt figyelembe kell venni a helyesség szempontjából.
Példák
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
Egy. A DARAB és a DISTINCT használata
Ez a példa az alkalmazott által tartható táblában lévő HumanResources.Employee különböző beosztások számát adja vissza.
SELECT COUNT(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO
Itt van az eredmények összessége.
-----------
67
B. A DARAB(*) használata
Ez a példa a táblázatban szereplő HumanResources.Employee alkalmazottak teljes számát adja vissza.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Itt van az eredmények összessége.
-----------
290
C. A DARAB(*) használata más aggregátumokkal
Ez a példa azt mutatja be, hogy COUNT(*) működik más összesítő függvények a SELECT listában.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Itt van az eredmények összessége.
------ ---------------------
14 3472.1428
D. Az OVER záradék használata
Ez a példa a MINzáradékkal rendelkező , MAX, AVGés COUNT függvényeket használja a OVER tábla egyes részlegeinek HumanResources.Department összesített értékeinek visszaadásához.
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;
Itt van az eredmények összessége.
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éldák: Azure Synapse Analytics and Analytics Platform System (PDW)
E. A DARAB és a DISTINCT használata
Ez a példa egy adott vállalat alkalmazottja által birtokolható különböző címek számát adja vissza.
USE ssawPDW;
SELECT COUNT(DISTINCT Title)
FROM dbo.DimEmployee;
Itt van az eredmények összessége.
-----------
67
F. A DARAB(*) használata
Ez a példa a tábla sorainak dbo.DimEmployee teljes számát adja vissza.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Itt van az eredmények összessége.
-------------
296
G. A DARAB(*) használata más aggregátumokkal
Ez a példa kombinálja COUNT(*) a SELECT lista más összesítő függvényeivel. Visszaadja az 500 000 USD-nél nagyobb éves értékesítési kvótával rendelkező értékesítési képviselők számát, valamint az értékesítési képviselők átlagos értékesítési kvótáját.
USE ssawPDW;
SELECT COUNT(EmployeeKey) AS TotalCount,
AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000
AND CalendarYear = 2001;
Itt van az eredmények összessége.
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. A COUNT használata a HAVING használatával
Ez a példa a COUNT záradékkal egy vállalat részlegeinek visszaadására használjaHAVING, amelyek mindegyike több mint 15 alkalmazottal rendelkezik.
USE ssawPDW;
SELECT DepartmentName,
COUNT(EmployeeKey) AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Itt van az eredmények összessége.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Én. A COUNT és a OVER használata
Ez a példa a COUNT záradékkal együtt a OVER megadott értékesítési rendelésekben szereplő termékek számát adja vissza.
USE ssawPDW;
SELECT DISTINCT COUNT(ProductKey) OVER (PARTITION BY SalesOrderNumber) AS ProductCount,
SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115', N'SO55981');
Itt van az eredmények összessége.
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981