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

ms177677.note(ru-ru,SQL.90).gifВажно!
Статистические вычисления с ключевым словом 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)

Справка и поддержка

Получение помощи по SQL Server 2005