Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Ta funkcja zwraca liczbę elementów znalezionych w grupie.
COUNT działa jak funkcja COUNT_BIG . Te funkcje różnią się tylko typami danych zwracanych wartości.
COUNT zawsze zwraca wartość typu danych int .
COUNT_BIG zawsze zwraca wartość typu danych bigint .
Transact-SQL konwencje składni
Składnia
Składnia funkcji agregacji:
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Składnia funkcji analitycznej:
COUNT ( { [ ALL ] expression | * } ) OVER ( [ <partition_by_clause> ] )
Argumenty (w programowaniu)
Wszystkie
Stosuje funkcję agregacji do wszystkich wartości.
ALL służy jako wartość domyślna.
ODMIENNY
Określa, że COUNT zwraca liczbę unikatowych wartości innych niż null.
wyrażenie
Wyrażenie dowolnego typu, z wyjątkiem obrazu, ntekstu lub tekstu.
COUNT nie obsługuje funkcji agregujących ani podzapytania w wyrażeniu.
*
Określa, że COUNT ma zliczać wszystkie wiersze, aby określić łączną liczbę wierszy tabeli do zwrócenia.
COUNT(*) nie przyjmuje żadnych parametrów i nie obsługuje użycia metody DISTINCT.
COUNT(*) nie wymaga parametru wyrażenia , ponieważ z definicji nie używa informacji o żadnej konkretnej kolumnie.
COUNT(*) Zwraca liczbę wierszy w określonej tabeli i zachowuje zduplikowane wiersze. Liczy każdy wiersz osobno, w tym wiersze zawierające wartości zerowe.
KONIEC ( [ partition_by_clause ] [ order_by_clause ] [ ROW_or_RANGE_clause ] )
Partition_by_clause dzieli zestaw wyników generowany przez klauzulę FROM na partycje, do których COUNT jest stosowana funkcja. Jeśli nie zostanie określony, funkcja traktuje wszystkie wiersze zestawu wyników zapytania jako pojedynczą grupę.
Order_by_clause określa kolejność logiczną operacji. Aby uzyskać więcej informacji, zobacz klauzulę OVER.
Typy zwracane
Zwraca wartość int NOT NULL, gdy
ANSI_WARNINGSma wartość .ONJednak program SQL Server zawsze traktujeCOUNTwyrażenia jako int NULL w metadanych, chyba że jest opakowany wISNULL.Zwraca wartość null int, gdy
ANSI_WARNINGSma wartośćOFF.
Uwagi
COUNT(*) bez GROUP BY zwraca kardynalności (liczba wierszy) w zestawie wyników. Ta liczba obejmuje wiersze, które mają wszystkie NULL wartości i duplikaty.
COUNT(*) funkcja z GROUP BY zwraca liczbę wierszy w każdej grupie. Ta liczba obejmuje NULL wartości i duplikaty.
COUNT(ALL <expression>) oblicza wyrażenie dla każdego wiersza w grupie i zwraca liczbę wartości innych niż null.
COUNT(DISTINCT <expression>) oblicza wyrażenie dla każdego wiersza w grupie i zwraca liczbę unikatowych wartości innych niż null.
Deterministyczne i nieokreślone użycie
COUNT_BIG jest funkcją deterministyczną , gdy jest używana bezOVER klauzul i ORDER BY .
COUNT_BIG jest niedeterministyczny w przypadku użycia z klauzulamiOVER i ORDER BY .
Używa OVER klauzul i ORDER BY |
Deterministyczny |
|---|---|
| Nie. | Tak |
| Tak | Nie. |
Aby uzyskać więcej informacji, zobacz funkcje deterministyczne i niedeterministyczne.
ARITHABORT i ANSI_WARNINGS
Gdy
COUNTzwraca wartość, która przekracza maksymalną wartość int (231–1 lub 2 147 483 647), funkcja kończy się niepowodzeniem z powodu przepełnienia liczby całkowitej.Jeśli
COUNTprzepełnienie i obieARITHABORTANSI_WARNINGSopcje toOFF,COUNTzwraca wartośćNULL. W przeciwnym razie, jeśli elementARITHABORTlubANSI_WARNINGSmaONwartość , zapytanie przerywa i zgłasza błąd przepełnienia arytmetycznego:Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int.Aby poprawnie obsłużyć te duże wyniki, użyj COUNT_BIG zamiast tego, co zwraca bigint.
Gdy obie
ARITHABORTwartości iANSI_WARNINGSsąON, można bezpiecznie opakowowaćCOUNTwywołania lokacji wISNULL( <count-expr>, 0), aby coerce typ wyrażenia do int NOT NULL zamiast intnull. ZawijanieCOUNTw systemieISNULLoznacza, że wszelkie błędy przepełnienia są dyskretnie pomijane, co należy wziąć pod uwagę pod kątem poprawności.
Przykłady
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
Odp. Używanie funkcji COUNT i DISTINCT
W tym przykładzie jest zwracana liczba różnych tytułów pracy w HumanResources.Employee tabeli, które może pomieścić pracownik.
SELECT COUNT(DISTINCT JobTitle)
FROM HumanResources.Employee;
GO
Oto zestaw wyników.
-----------
67
B. Użyj funkcji COUNT(*)
Ten przykład zwraca łączną liczbę pracowników w HumanResources.Employee tabeli.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Oto zestaw wyników.
-----------
290
C. Używanie funkcji COUNT(*) z innymi agregacjami
W tym przykładzie pokazano, że COUNT(*) działa z innymi funkcjami agregacji na SELECT liście.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Oto zestaw wyników.
------ ---------------------
14 3472.1428
D. Używanie klauzuli OVER
W tym przykładzie MINużyto funkcji , MAX, AVGi COUNT z klauzulą OVER , aby zwrócić zagregowane wartości dla każdego działu w HumanResources.Department tabeli.
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;
Oto zestaw wyników.
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
Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)
E. Używanie funkcji COUNT i DISTINCT
W tym przykładzie jest zwracana liczba różnych tytułów, które może pomieścić pracownik określonej firmy.
USE ssawPDW;
SELECT COUNT(DISTINCT Title)
FROM dbo.DimEmployee;
Oto zestaw wyników.
-----------
67
F. Użyj funkcji COUNT(*)
Ten przykład zwraca łączną liczbę wierszy w dbo.DimEmployee tabeli.
USE ssawPDW;
SELECT COUNT(*)
FROM dbo.DimEmployee;
Oto zestaw wyników.
-------------
296
G. Używanie funkcji COUNT(*) z innymi agregacjami
Ten przykład łączy się COUNT(*) z innymi funkcjami agregacji na SELECT liście. Zwraca liczbę przedstawicieli sprzedaży z rocznym limitem sprzedaży większym niż 500 000 USD oraz średnią kwotą sprzedaży tych przedstawicieli sprzedaży.
USE ssawPDW;
SELECT COUNT(EmployeeKey) AS TotalCount,
AVG(SalesAmountQuota) AS [Average Sales Quota]
FROM dbo.FactSalesQuota
WHERE SalesAmountQuota > 500000
AND CalendarYear = 2001;
Oto zestaw wyników.
TotalCount Average Sales Quota
---------- -------------------
10 683800.0000
H. Używanie funkcji COUNT z UŻYCIEM
W tym przykładzie COUNT użyto HAVING klauzuli z klauzulą , aby zwrócić działy firmy, z których każdy ma więcej niż 15 pracowników.
USE ssawPDW;
SELECT DepartmentName,
COUNT(EmployeeKey) AS EmployeesInDept
FROM dbo.DimEmployee
GROUP BY DepartmentName
HAVING COUNT(EmployeeKey) > 15;
Oto zestaw wyników.
DepartmentName EmployeesInDept
-------------- ---------------
Sales 18
Production 179
Ja. Używanie funkcji COUNT z funkcją OVER
W tym przykładzie użyto COUNT klauzuli z klauzulą OVER , aby zwrócić liczbę produktów zawartych w każdym z określonych zamówień sprzedaży.
USE ssawPDW;
SELECT DISTINCT COUNT(ProductKey) OVER (PARTITION BY SalesOrderNumber) AS ProductCount,
SalesOrderNumber
FROM dbo.FactInternetSales
WHERE SalesOrderNumber IN (N'SO53115', N'SO55981');
Oto zestaw wyników.
ProductCount SalesOrderID
------------ -----------------
3 SO53115
1 SO55981
Treści powiązane
- funkcje agregujące (Transact-SQL)
- COUNT_BIG (Transact-SQL)
- SELECT — klauzula OVER (Transact-SQL)