В данном разделе рассматривается применение в запросе агрегирующих функций- функций вычисляющих результат по набору значений группы, либо всех записей БД. Например, функция sum возвращает сумму значений заданного поля, а функция count - общее число записей.
Агрегирующая функция может применяться ко всем записям БД слоя, к выборке по заданным условиям и, кроме того, возможно группирование записей слоя в несколько групп, и применение агрегирующей функции к каждой группе («Группировка записей»).
Применяемые агрегирующие функции записываются после ключевого слова
SELECT. Также допускается использовать агрегирующие функции в составе
выражений, включающих функции, арифметические и побитовые операции. В одном запросе может
перечисляться несколько выражений с агрегирующими функциями. Не допускается в запросе
одновременно с агрегирующими функциями запрашивать значения полей записей БД, либо
использовать в аргументах неагрегирующих функций обращения к полям записей БД . Например,
запрос вида SELECT SQRT(Area), SUM(Perimeter) FROM Здания
не допускается,
поскольку аргументом функции SQRT является название поля данных.
Общая запись агрегирующих функций:
<Функция>
([DISTINCT]<выражение>
)
В качестве аргумента агрегирующей функции обычно используется название поля, над значениями которого проводятся вычисления. Также допускается в качестве аргумента использовать выражения, включающие в себя произвольную комбинацию названий полей, констант, функций и подзапросов, объединенных арифметическими и побитовыми операциями.
Остальная часть запроса задается стандартным образом.
Перед аргументом функции (кроме функций MAX и MIN)может указываться ключевое слово DISTINCT. В этом случае итоговое значение вычисляется только для различающихся значений аргумента. При использовании ключевого слова DISTINCT в качестве аргумента агрегирующей функции нельзя использовать арифметические выражения, - только названия полей.
В языке SQL используются следующие агрегирующие функции:
SUM([DISTINCT] <выражение>)
Выводит в итоговой таблице сумму значений для выражения по полям выборки. Выражение должно возвращать числовое значение.
AVG([DISTINCT] <выражение>)
Среднее значение для выражения. Выражение должно возвращать числовое значение.
COUNT([DISTINCT] <выражение> |*)
Подсчитывает число записей, в который выражение не имеет значение Null
(поля имеют значение Null
, когда никакое значение для них не задано).
Выражение может возвращать произвольное значение.
При используемом формате функции COUNT(*) возвращает общее количество записей в БД слоя.
MAX( <выражение>)
Возвращает максимальное значение выражения для выборки.
MIN(<выражение>
)
Возвращает минимальное значение выражения из выборки.
Применение агрегирующих функций
Простой пример
SELECT SUM(Perimeter) FROM Здания
Выводит сумму периметров зданий.
Одновременное применение нескольких функций
SELECT AVG(Area), Count(*) FROM Здания
Выводит среднюю площадь здания и общее количество зданий.
Применение функций совместно с условиями отбора
SELECT SUM(Area) FROM Здания WHERE Улица='Нахимова'
Возвращает сумму площадей зданий расположенных на улице Нахимова.
Применение выражений в качестве аргументов агрегирующих функций
SELECT SUM(Area/Perimeter*2) FROM Здания
Для каждого здания рассчитывается величина равная Площадь/Периметр*2
и
суммируется.
Применение агрегирующих функций в составе выражений
SELECT SQRT(SUM(Area)), "Общий периметр" + SUM(Perimeter) FROM Здания
Возвращает квадратный корень от суммарной площади всех зданий и фразу вида «Общий
периметр XXX», где XXX
- суммарный периметр всех зданий.
Использование ключевого слова DISTINCT
SELECT COUNT(DISTINCT Улица) FROM Здания
Возвращает количество разных названий улиц в БД слоя.