Megosztás a következőn keresztül:


DARAB (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-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. Az ALL az alapértelmezett.

KÜLÖNBÖZŐ

COUNT Az egyedi nemnull é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 a DISTINCT használatát. 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. Külön számolja az egyes sorokat. Ide tartoznak a null értékeket tartalmazó sorok.

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ókért lásd a OVER záradékot (Transact-SQL).

Visszatérési típusok

  • int NOT NULL, amikor ANSI_WARNINGS van, azonban az ONSQL Server mindig metaadatokként kezeli COUNT a kifejezéseketint NULL, kivéve, ha be van csomagolva.ISNULL

  • int NULL , ha ANSI_WARNINGS az OFF.

Megjegyzések

  • COUNT(*) az GROUP BY eredményhalmaz számosságát (sorok számát) adja vissza. Ide tartoznak az összesNULL értékből és ismétlődésekből álló sorok.
  • COUNT(*) az GROUP BY egyes csoportok sorainak számát adja vissza. Ez 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 nemnull értékek számát.
  • COUNT(DISTINCT <expression>) kiértékeli a csoport minden sorához tartozó kifejezést , és visszaadja az egyedi, nemnull értékek számát.

COUNT determinisztikus függvény, ha az OVER és AZ ORDER BY záradékok nélkül használatos. Nemdeterminisztikus, ha az OVER és AZ ORDER BY záradékokkal használja. További információ: Determinisztikus és nem determinisztikus függvények.

ARITHABORT és ANSI_WARNINGS

Ha COUNT a visszatérési érték meghaladja az int maximális értékét (azaz 231-1 vagy 2 147 483 647), a COUNT függvény egész szám túlcsordulás miatt meghiúsul. Ha COUNT a túlcsordulások, valamint a beállítások és a ARITHABORT beállítások ANSI_WARNINGS, OFFCOUNT a rendszer ad vissza .NULL Ellenkező esetben a ARITHABORTANSI_WARNINGS lekérdezés megszakad, és megjelenik ONaz aritmetikai túlcsordulási hiba.Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int. Ezeknek a nagy eredményeknek a helyes kezeléséhez használja COUNT_BIG inkább, ami nagyot ad vissza.

Ha mindkettő ARITHABORTANSI_WARNINGSON, akkor biztonságosan körbefuttathatja COUNT a hívási helyeket ISNULL( <count-expr>, 0 ) , hogy a kifejezés típusa helyett a kifejezés típusát int NOT NULL kényszerítse int NULL. A körbefuttatás COUNT azt jelenti, hogy a túlcsordulási hibák csendben ISNULL el lesznek tiltva, ami a helyesség szempontjából megfontolandó.

Példák

Egy. A DARAB és a DISTINCT használata

Ez a példa az Adventure Works Cycles-alkalmazottak által birtokolható különböző címek számát adja vissza.

SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO

Itt van az eredmények összessége.

-----------
67
  
(1 row(s) affected)

B. A DARAB(*) használata

Ez a példa az Adventure Works Cycles alkalmazottainak teljes számát adja vissza.

SELECT COUNT(*)
FROM HumanResources.Employee;
GO

Itt van az eredmények összessége.

-----------
290
  
(1 row(s) affected)

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. A példa az AdventureWorks2025 adatbázist használja.

SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO

Itt van az eredmények összessége.

----------- ---------------------
14            3472.1428
  
(1 row(s) affected)

D. Az OVER záradék használata

Ez a példa a MIN, MAX, AVG és COUNT függvényeket használja a OVER záradékkal, hogy visszaadja az összes osztály aggregált értékeit az AdventureWorks2025 adatbázis HumanResources.Department táblájában.

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;

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
  
(16 row(s) affected)

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

Lásd még