AVG (Transact-SQL)
Возвращает среднее арифметическое группы значений. Значения NULL не учитываются. Может следовать за предложением OVER.
Синтаксис
AVG ( [ ALL | DISTINCT ] expression )
Аргументы
ALL
Применяет статистическую функцию ко всем значениям. ALL является значением по умолчанию.DISTINCT
Указывает на то, что функция AVG будет выполнена только для одного экземпляра каждого уникального значения, независимо от того, сколько раз встречается это значение.expression
Выражение, принадлежащее к категории точных или приблизительных числовых типов данных, за исключением типа данных bit. Статистические функции и вложенные запросы несовместимы.
Возвращаемые типы
Возвращаемый тип определяется типом вычисленного результата expression.
Результат выражения |
Возвращаемый тип |
---|---|
tinyint |
int |
smallint |
int |
int |
int |
bigint |
bigint |
категория decimal (p, s) |
decimal(38, s) делится на decimal(10, 0) |
категория money и smallmoney. |
money |
категория float и real. |
float |
Замечания
Если тип данных expression является типом данных-псевдонимом, возвращаемый тип также является типом данных-псевдонимом. Однако если базовый тип данных типа данных-псевдонима может повышаться, например из tinyint в int, возвращаемое значение будет иметь повышенный тип данных, а не тип данных псевдонима.
Функция AVG () вычисляет среднее арифметическое набора значений, выполняя деление суммы этих значений на число значений, не равных NULL. Если сумма превышает максимальное значение для типа данных возвращаемого значения, будет возвращена ошибка.
Примеры
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)
Б. Использование функций SUM и AVG с предложением GROUP BY
При использовании с предложением GROUP BY каждая статистическая функция создает одно значение для каждой группы вместо всей таблицы. В следующем примере создается итоговое значение для каждой территории продаж. Итог содержит средний бонус, полученный продавцами по каждой территории и сумму продаж за текущий год для каждой территории.
USE AdventureWorks;
GO
SELECT TerritoryID, AVG(Bonus)AS 'Average bonus', SUM(SalesYTD) AS 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
В. Использование функции AVG с ключевым словом DISTINCT
Следующая инструкция возвращает среднюю справочную цену на продукцию.
USE AdventureWorks;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
Ниже приводится результирующий набор.
------------------------------
437.4042
(Обработано строк: 1)
Г. Использование функции AVG без ключевого слова DISTINCT
Без ключевого слова DISTINCT функция AVG находит среднюю справочную цену всех продуктов в таблице Product.
USE AdventureWorks;
GO
SELECT AVG(ListPrice)
FROM Production.Product;
Ниже приводится результирующий набор.
------------------------------
438.6662
(Обработано строк: 1)