AVG (Transact-SQL)
Возвращает среднее арифметическое группы значений. Значения NULL пропускаются. Может следовать за предложением OVER.
Синтаксические обозначения в Transact-SQL
Синтаксис
AVG ( [ ALL | DISTINCT ] expression )
Аргументы
- ALL
Применяет статистическую функцию ко всем значениям. ALL является параметром по умолчанию.
- DISTINCT
Указывает на то, что функция AVG будет выполнена только для одного экземпляра каждого уникального значения, независимо от того, сколько раз встречается это значение.
- expression
Выражение, принадлежащее к категории точных или приблизительных числовых типов данных, за исключением типа данных bit. Статистические функции и вложенные запросы несовместимы.
Типы возвращаемых данных
Возвращаемый тип определяется типом вычисленного результата expression.
Результат выражения | Возвращаемый тип |
---|---|
категория целых чисел |
int |
категория decimal (p, s) |
decimal(38, s) делится на decimal(10, 0) |
категория money и smallmoney. |
money |
категория float и real. |
float |
Важно! |
---|
Статистические вычисления с ключевым словом DISTINCT, например AVG(DISTINCT column_name), COUNT(DISTINCT column_name), MAX(DISTINCT column_name), MIN(DISTINCT column_name) и SUM(DISTINCT column_name), не поддерживаются, если используется ключевое слово CUBE или ROLLUP. Если они используются, то компонент SQL Server 2005 Database Engine возвращает сообщение об ошибке и отменяет запрос. |
Замечания
Если тип данных expression является типом данных-псевдонимом, возвращаемый тип также является типом данных-псевдонимом. Однако если базовый тип данных типа данных-псевдонима может повышаться, например из tinyint в int, возвращаемое значение будет иметь повышенный тип данных, а не тип данных псевдонима.
Примеры
A. Использование функций SUM и AVG для вычислений
В следующем примере вычисляется среднее количество часов отпуска и сумма часов больничных, которые использовал вице-президент компании Adventure Works Cycles. Каждая из этих статистических функций создает одно итоговое значение для всех извлеченных строк.
USE AdventureWorks;
GO
SELECT AVG(VacationHours)as 'Average vacation hours',
SUM (SickLeaveHours) as 'Total sick leave hours'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%';
Ниже приводится результирующий набор.
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
Б. Использование функций SUM и AVG с предложением GROUP BY
При использовании с предложением GROUP BY
каждая статистическая функция создает одно значение для каждой группы вместо всей таблицы. В следующем примере создается итоговое значение для каждой территории продаж. Итог содержит средний бонус, полученный продавцами по каждой территории и сумму продаж за текущий год для каждой территории.
USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
В. Использование функции AVG с ключевым словом DISTINCT
Следующая инструкция возвращает среднюю справочную цену на продукцию.
USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Ниже приводится результирующий набор.
------------------------------
437.4042
(1 row(s) affected)
Г. Использование функции AVG без ключевого слова DISTINCT
Без ключевого слова DISTINCT функция AVG
находит среднюю справочную цену всех продуктов в таблице Product
.
USE AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;
Ниже приводится результирующий набор.
------------------------------
438.6662
(1 row(s) affected)
См. также
Справочник
Статистические функции (Transact-SQL)
Предложение OVER (Transact-SQL)