Функция COUNT (Transact-SQL)
Возвращает количество элементов в группе. Функция COUNT работает аналогично функции COUNT_BIG. Единственное различие между двумя функциями — возвращаемые значения. Функция COUNT всегда возвращает значение типа int. Функция COUNT_BIG всегда возвращает значение типа данных bigint. Может следовать за предложением OVER.
Синтаксические обозначения в Transact-SQL
Синтаксис
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
Аргументы
ALL
Применяет агрегатную функцию ко всем значениям. По умолчанию задается параметр ALL.DISTINCT
Указывает, что функция COUNT возвращает количество уникальных значений, не равных NULL.expression
Выражение любого типа, за исключением text, image или ntext. Агрегатные функции и вложенные запросы не допускаются.*
Указывается, что при возврате общего числа строк в таблице необходимо посчитать все строки. Функция COUNT(*) не принимает аргументы и не может использоваться с ключевым словом DISTINCT. Для функции COUNT(*) не нужен аргумент expression, так как по определению она не использует сведения о каких-либо конкретных столбцах. Функция COUNT(*) возвращает количество строк в указанной таблице, не отбрасывая дублированные строки. Подсчитывает каждую строку отдельно. При этом учитываются и строки, содержащие значения NULL.
Типы возвращаемых данных
int
Замечания
Функция COUNT(*) возвращает количество элементов в группе. Сюда входят значения NULL и повторяющиеся значения.
Функция COUNT(ALL expression) оценивает expression для каждой строки в группе и возвращает количество значений, не равных NULL.
Функция COUNT(DISTINCT expression) оценивает expression для каждой строки в группе и возвращает количество уникальных значений, не равных NULL.
Для возвращаемых значений, больших 2^31-1, функция COUNT формирует сообщение об ошибке. Вместо этого следует использовать COUNT_BIG.
Примеры
А.Использование функции COUNT и параметра DISTINCT
В следующем примере приводится количество различных должностей, которые могут иметь служащие, работающие в компании Компания Adventure Works Cycles.
USE AdventureWorks2012;
GO
SELECT COUNT(DISTINCT Title)
FROM HumanResources.Employee;
GO
Ниже приводится результирующий набор.
-----------
67
(1 row(s) affected)
Б.Использование функции COUNT(*)
В следующем примере определяется общее количество служащих, работающих в компании Компания Adventure Works Cycles.
USE AdventureWorks2012;
GO
SELECT COUNT(*)
FROM HumanResources.Employee;
GO
Ниже приводится результирующий набор.
-----------
290
(1 row(s) affected)
В.Использование функции COUNT(*) совместно с другими статистическими функциями
В следующем примере показывается, что функция COUNT(*) в списке выбора может сочетаться с другими агрегатными функциями.
USE AdventureWorks2012;
GO
SELECT COUNT(*), AVG(Bonus)
FROM Sales.SalesPerson
WHERE SalesQuota > 25000;
GO
Ниже приводится результирующий набор.
----------- ---------------------
14 3472.1428
(1 row(s) affected)
В.Использование предложения OVER
В следующем примере рассматривается применение функций MIN, MAX, AVG и COUNT с предложением OVER для получения статистических значений для каждого из отделов в таблице HumanResources.Department.
USE AdventureWorks2012;
GO
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;
Ниже приводится результирующий набор.
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)