Select avg sql что это
Функция Avg
Вычисляет среднее арифметическое набора значений, содержащихся в определенном поле запроса.
Синтаксис
Аргумент выражение представляет собой строковое выражение, определяющее поле с числовыми данными, для которых требуется найти среднее арифметическое, или выражение, с помощью которого производится расчет. Операндом в выражении может быть имя таблицы, константа или функция (встроенная или определяемая пользователем, но не другая агрегатная функция SQL).
Примечания
Значение, полученное с помощью функции Avg, является средним арифметическим (суммой значений, деленной на их количество). Например, вы можете использовать функцию Avg, чтобы подсчитать среднюю стоимость доставки.
Функция Avg не учитывает поля со значением Null.
Avg можно использовать в выражении запроса и в свойстве SQL объекта QueryDef или при создании набор записей на основе SQL запроса.
Примеры
SELECT Avg([UnitPrice]) AS Expr1 FROM ProductSales;
Возвращает среднее значение всех значений поля «Цена» из таблицы «ProductSales» и отображает его в столбце «Вырасть1».
SELECT Avg([SalePrice]) AS AvgSalePrice, Avg([Discount]) AS AvgDiscount FROM ProductSales;
Возвращает среднее значение полей «ЦенаПродажи» и «Скидка» из таблицы ProductSales. Результаты отображаются в столбце «AvgSalePrice» и «AvgDiscount» соответственно, возвращая среднее значение всех продаж «SalePrice», где проданное «Количество» больше 10. Результаты отображаются в столбце «AvgSalePrice».
SELECT Abs(Avg([Discount])) AS AbsAverageDiscount FROM ProductSales;
Возвращает абсолютную величину среднего значения поля Discount и отображает в столбце «AbsAverageDiscount».
Avg (многомерные выражения)
Вычисляет набор и возвращает среднее непустых значений ячеек набора; среднее считается по мерам в наборе или по указанной мере.
Синтаксис
Аргументы
Set_Expression
Допустимое многомерное выражение, возвращающее набор.
Numeric_Expression
Допустимое числовое выражение (обычно многомерное выражение координат ячейки), возвращающее число.
Remarks
Если задан набор пустых кортежей или пустой набор, функция AVG возвращает пустое значение.
Функция AVG вычисляет среднее для непустых значений ячеек в заданном наборе, сначала вычисляя сумму значений по ячейкам в указанном наборе, а затем вычисляет вычисленную сумму по количеству непустых ячеек в указанном наборе.
Службы Службы Analysis Services отбрасывает неопределенные значения при вычислении среднего значения для набора чисел.
Если определенное числовое выражение (обычно мера) не указано, функция AVG усредняет среднюю величину в текущем контексте запроса. Если указана определенная мера, функция AVG сначала вычисляет меру по набору, а затем функция вычисляет среднее на основе указанной меры.
При использовании функции CurrentMember в операторе вычисляемого элемента необходимо указать числовое выражение, так как для текущей координаты в таком контексте запроса не существует меры по умолчанию.
Примеры
Следующий пример возвращает среднее значение для меры в указанном наборе. Обратите внимание, что заданная мера может быть либо мерой по умолчанию для элементов указанного набора, либо указанной мерой.
WITH SET [NW Region] AS
MEMBER [Geography].[Geography].[NW Region Avg] AS
—Uncomment the line below to get an average by Reseller Gross Profit Margin
—otherwise the average will be by whatever the default measure is in the cube,
—or whatever measure is specified in the query
—, [Measures].[Reseller Gross Profit Margin]
SELECT [Date].[Calendar Year].[Calendar Year].Members ON 0
FROM [Adventure Works]
WHERE ([Geography].[Geography].[NW Region Avg])
WITH MEMBER Measures.[Avg Gross Profit Margin] AS
Measures.[Gross Profit Margin]
MEMBER Measures.[Avg Gross Profit Margin Including Empty Days] AS
CoalesceEmpty(Measures.[Gross Profit Margin],0)
[Ship Date].[Fiscal].[Fiscal Year].Members ON ROWS
AVG (Transact-SQL)
Эта функция возвращает среднее арифметическое группы значений. Значения NULL она не учитывает.
Синтаксические обозначения в Transact-SQL
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
ALL
Применяет агрегатную функцию ко всем значениям. ALL является параметром по умолчанию.
DISTINCT
Указывает на то, что функция AVG выполняется только для одного уникального экземпляра каждого значения, независимо от того, сколько раз встречается это значение.
expression
Выражение категории точного числового или приблизительного числового типа данных, за исключением типа данных bit. Агрегатные функции и вложенные запросы не допускаются.
OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause делит результирующий набор, полученный с помощью предложения FROM, на секции, к которым применяется функция. Если этот параметр не указан, функция обрабатывает все строки результирующего набора запроса как отдельные группы. order_by_clause определяет логический порядок, в котором выполняется операция. Аргумент order_by_clause является обязательным. Дополнительные сведения см. в статье Предложение OVER (Transact-SQL).
Типы возвращаемых данных
Тип возвращаемого значения определяется типом вычисленного результата выражения.
Результат выражения | Возвращаемый тип |
---|---|
tinyint | int |
smallint | int |
int | int |
bigint | bigint |
Категория decimal (p, s) | decimal(38, max(s,6)) |
Категории money и smallmoney | money |
Категории float и real | float |
Комментарии
Если тип данных expression является типом данных-псевдонимом, тип возвращаемого значения также является типом данных-псевдонимом. Однако если базовый тип данных типа данных-псевдонима может повышаться, например из tinyint в int, возвращаемое значение будет иметь повышенный тип данных, а не тип данных-псевдоним.
Функция AVG () вычисляет среднее арифметическое набора значений, выполняя деление суммы этих значений на число значений, не равных NULL. Если сумма превышает максимальное значение для типа данных возвращаемого значения, AVG() возвратит ошибку.
AVG — это детерминированная функция, если она используется без предложений OVER и ORDER BY. Она не детерминирована при использовании с предложениями OVER и ORDER BY. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.
Примеры
A. Использование функций SUM и AVG для вычислений
В этом примере вычисляется среднее количество часов отпуска и сумма часов отсутствия по болезни, которые использовали вице-президенты компании Компания Adventure Works Cycles. Каждая из этих агрегатных функций создает одно сводное значение для всех извлеченных строк. В этом примере используется база данных AdventureWorks2012.
Б. Использование функций SUM и AVG в предложении GROUP BY
При использовании с предложением GROUP BY каждая агрегатная функция создает одно значение, охватывающее каждую группу, а не одно значение для всей таблицы. В следующем примере создается итоговое значение для каждой территории сбыта в базе данных AdventureWorks2012. Итог содержит средний бонус, полученный продавцами по каждой территории, и сумму продаж за текущий год для каждой территории.
В. Использование функции AVG с ключевым словом DISTINCT
Эта инструкция возвращает среднюю ориентировочную цену на продукцию из базы данных AdventureWorks2012. При использовании DISTINCT в расчете учитываются только уникальные значения.
Г. Использование функции AVG без ключевого слова DISTINCT
Без ключевого слова DISTINCT функция AVG находит среднюю ориентировочную цену всех продуктов в таблице Product в базе данных AdventureWorks2012, учитывая и все повторяющиеся значения.
Д. Использование предложения OVER
В этом примере предложение OVER не включает в себя предложение PARTITION BY. Это означает, что функция будет применяться для всех строк, возвращаемых запросом. Предложение ORDER BY, указанное в предложении OVER, определяет логический порядок применения функции AVG. Запрос возвращает скользящее среднее значение продаж за год для всех территорий, указанных в предложении WHERE. Предложение ORDER BY, указанное в инструкции SELECT, определяет порядок, в котором эта инструкция отображает строки запроса.
Агрегатные функции
SQL позволяет работать не только с отдельными строками, но и производить аналитику по всем строкам или по группе строк. Функции, возвращающие единственное значение для набора строк, называются агрегатными.
В большинстве задач можно обойтись следующим джентельменским набором агрегатных функций:
Чтобы вызвать агрегатную функцию необходимо указать ее в списке выборки (после SELECT ). Если в SELECT использована хотя бы одна агрегатная функция, то значениями других столбцов могут быть только вызовы агрегатных функций, либо константы. Попробуем воспользоваться агрегатными функциями на следующей таблице:
value |
---|
1 |
2 |
3 |
NULL |
avg | min | max | sum | count_total | count_value |
---|---|---|---|---|---|
2 | 1 | 3 | 6 | 4 | 3 |
При попытке вызова агрегатной функции вместе с выводом столбца таблицы в списке выборки возникнет ошибка:
И это логично. Агрегатная функция должна вернуть одно значение на весь набор данных (в нашем запросе одну строку), а какое значение product_id взять из всех строк? Помимо агрегатных функций есть еще аналитические функции, которые не изменяют количество строк в результате выборки, но при этом позволяют вычислять значения по набору строк. С ними мы познакомимся позднее.
SQL AVG () с ROUND (), группировка по
AVG () с ROUND () и группировка по
На этой странице мы собираемся обсудить использование SQL ROUND () вместе с функцией SQL AVG (). SQL ROUND () используется для округления значения до определенного десятичного знака.
Предложение GROUP BY с агрегатной функцией создает результат в группе.
Примеры:
Образец таблицы: клиент
Чтобы получить среднее значение параметра «holy_amount» как целое число, означающее округление до нуля из таблицы «customer», можно использовать следующий оператор SQL:
SQL AVG () с группировкой по
Пример таблицы: заказы
Чтобы получить данные «agent_code», используйте среднее значение «advance_amount» для каждого агента из таблицы «orders» со следующим условием:
1. каждый код агента должен быть в группе,
можно использовать следующий оператор SQL:
SQL AVG () с ROUND () и группировать по
Образец таблицы: клиент
1. каждый агент должен прийти в группу,
можно использовать следующий оператор SQL:
SQL AVG () с ROUND (), округленным до ближайшего отрицательного значения
Далее мы обсудим, как можно использовать SQL ROUND () вместе с функцией SQL AVG () для округления значения до определенного десятичного знака. Округление может быть выполнено до ближайших отрицательных или положительных знаков после запятой (.).
Образец таблицы: клиент
SQL AVG () с ROUND (), округленным до ближайшего положительного значения
Образец таблицы: клиент
Чтобы получить среднее значение «(879.254 / 2)» с заголовком «My Avg» и среднее значение «(879.254 / 2)», округленное до 2 десятичных разрядов, положительное от десятичной точки с заголовком «Rounded 2 Decimal Place» из таблицы customer можно использовать следующий оператор SQL:
SQL AVG () с ROUND () как целое число
Образец таблицы: клиент
Чтобы получить среднее значение ‘(879.254 / 2)’ и среднее значение ‘(879.254 / 2)’, округленное до 0-го знака после запятой с заголовком ‘Rounded’ из таблицы ‘customer’, следующий оператор SQL может быть используемый :
Примечание. Выводы указанного оператора SQL, показанного здесь, взяты с использованием Oracle Database 10g Express Edition.
Вот слайд-презентация всех агрегатных функций.
Упражнения по SQL
Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.