Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
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 nonnull.
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 parametrów i nie obsługuje użycia funkcji 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. Zlicza każdy wiersz oddzielnie. Obejmuje to wiersze zawierające wartości null.
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 (Transact-SQL).
Typy zwracane
int NOT NULL , gdy
ANSI_WARNINGSma wartośćON, jednak program SQL Server zawsze traktujeCOUNTwyrażenia tak jakint NULLw metadanych, chyba że jest opakowany wISNULL.int NULL , gdy
ANSI_WARNINGSma wartośćOFF.
Uwagi
-
COUNT(*)bezGROUP BYzwraca kardynalności (liczba wierszy) w zestawie wyników. Obejmuje to wiersze składające się z wartości wszystkichNULLi duplikatów. -
COUNT(*)funkcja zGROUP BYzwraca liczbę wierszy w każdej grupie.NULLObejmuje to wartości i duplikaty. -
COUNT(ALL <expression>)oblicza wyrażenie dla każdego wiersza w grupie i zwraca liczbę wartości innych niż. -
COUNT(DISTINCT <expression>)oblicza wyrażenie dla każdego wiersza w grupie i zwraca liczbę unikatowych wartości innych niż.
COUNT jest funkcją deterministyczną, gdy jest używana bez klauzul OVER i ORDER BY. Jest on niedeterministyczny w przypadku użycia z klauzulami OVER i ORDER BY. Aby uzyskać więcej informacji, zobacz funkcje deterministyczne i niedeterministyczne.
ARITHABORT i ANSI_WARNINGS
Jeśli COUNT wartość zwracana przekracza maksymalną wartość int (czyli 231–1 lub 2 147 483 647), COUNT funkcja zakończy się niepowodzeniem z powodu przepełnienia liczby całkowitej. Gdy COUNT przepełnienie i obieARITHABORTANSI_WARNINGS opcje to OFF, COUNT zwróci wartość NULL. W przeciwnym razie, gdy jeden z elementów ARITHABORT lub ANSI_WARNINGS ma ONwartość , zapytanie zostanie przerwane i zostanie zgłoszony błąd Msg 8115, Level 16, State 2; Arithmetic overflow error converting expression to data type int. przepełnienia arytmetycznego. Aby poprawnie obsłużyć te duże wyniki, należy użyć polecenia COUNT_BIG , który zwraca wartość bigint.
W przypadku obu ARITHABORT elementów i ANSI_WARNINGSONmożna bezpiecznie opakowować COUNT wywołania w pliku , ISNULL( <count-expr>, 0 ) aby wymuś typ int NOT NULL wyrażenia zamiast int NULL. Zawijanie COUNT w ISNULL systemie oznacza, że wszelkie błędy przepełnienia będą dyskretnie pomijane, co powinno być brane pod uwagę pod kątem poprawności.
Przykłady
Odp. Używanie funkcji COUNT i DISTINCT
W tym przykładzie jest zwracana liczba różnych tytułów, które może pomieścić pracownik Adventure Works Cycles.
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
Oto zestaw wyników.
-----------
67
(1 row(s) affected)
B. Użyj funkcji COUNT(*)
Ten przykład zwraca łączną liczbę pracowników Adventure Works Cycles.
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Oto zestaw wyników.
-----------
290
(1 row(s) affected)
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. Przykład wykorzystuje bazę danych AdventureWorks2025.
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Oto zestaw wyników.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
D. Używanie klauzuli OVER
Ten przykład wykorzystuje MIN, MAX, AVG i funkcjonuje COUNT z klauzulą OVER , aby zwracać zagregowane wartości dla każdego działu w tabeli bazy HumanResources.Department danych AdventureWorks2025.
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;
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
(16 row(s) affected)
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
Zobacz także
- funkcje agregujące (Transact-SQL)
- COUNT_BIG (Transact-SQL)
- OVER, klauzula (Transact-SQL)