Поделиться через


AVG (Transact-SQL)

Возвращает среднее арифметическое группы значений. Значения NULL пропускаются. Может следовать за предложением OVER.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

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 AdventureWorks2008R2;
GO
SELECT AVG(VacationHours)AS 'Average vacation hours', 
    SUM  (SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';

Ниже приводится результирующий набор.

Среднее количество часов отпуска Общее количество часов больничных

---------------------- ----------------------

25 97

(Обработано строк: 1)

Б. Использование функций SUM и AVG с предложением GROUP BY

При использовании с предложением GROUP BY каждая агрегатная функция создает одно значение для каждой группы вместо всей таблицы. В следующем примере создается итоговое значение для каждой территории продаж. Итог содержит средний бонус, полученный продавцами по каждой территории и сумму продаж за текущий год для каждой территории.

USE AdventureWorks2008R2;
GO
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as 'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO

В. Использование функции AVG с ключевым словом DISTINCT

Следующая инструкция возвращает среднюю справочную цену на продукцию.

USE AdventureWorks2008R2;
GO
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;

Ниже приводится результирующий набор.

------------------------------

437.4042

(Обработано строк: 1)

Г. Использование функции AVG без ключевого слова DISTINCT

Без ключевого слова DISTINCT функция AVG находит среднюю справочную цену всех продуктов в таблице Product.

USE AdventureWorks2008R2;
GO
SELECT AVG(ListPrice)
FROM Production.Product;

Ниже приводится результирующий набор.

------------------------------

438.6662

(Обработано строк: 1)