Megosztás:


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. 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_WARNINGS az .ON Az SQL Server azonban a metaadatokban mindig null értékű kifejezésként kezeli COUNT a kifejezéseket, kivéve, ha be van csomagolva.ISNULL

  • Null értéket ad vissza, ha ANSI_WARNINGS az .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 COUNT olyan é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 COUNT a túlcsordulások, valamint a lehetőségek és ANSI_WARNINGS a ARITHABORT lehetőségek is, OFFCOUNT akkor a visszaadott NULLérték. Ellenkező esetben a ARITHABORTANSI_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 van ON, biztonságosan befuttathatja COUNT a híváshelyeket ISNULL( <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ás COUNT azt jelenti, hogy a túlcsordulási hibák csendben ISNULL el 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