Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Агрегатные функции, за исключением COUNT, не учитывают значения NULL. Агрегатные функции часто используются совместно с предложением GROUP BY.
Агрегатные функции могут быть использованы в качестве выражений только в следующих случаях:
-
Список выбора инструкции SELECT (вложенный или внешний запрос);
-
Предложение HAVING.
<aggregate_function> ::= aggragate_function ([ALL | DISTINCT] <expr>) [FILTER (WHERE <condition>)]
Агрегатные функции также могут использоваться как оконные с предложением OVER ().
Подробнее смотри в Оконные (Аналитические) функции.
Предложение FILTER расширяет агрегатные функции дополнительным предложением WHERE.
Если используется предложение FILTER, то результат агрегата строится только из строк, которые также удовлетворяют условию в дополнительном предложении WHERE.
Как правило, предложение фильтра может быть реализовано с использованием выражения CASE внутри агрегатной функции: условие фильтра должно быть помещено в предложение WHEN, значение, которое должно быть агрегировано в предложение THEN.
Поскольку агрегатные функции обычно пропускают значения NULL, неявное предложение ELSE NULL достаточно, чтобы игнорировать не подходящие под условия фильтрации строки.
Следующие два выражения эквивалентны:
SUM(<expression>) FILTER(WHERE <condition>)
и
SUM(CASE WHEN <condition> THEN <expression> END)
Для COUNT(*) этот пример выглядит иначе, потому что выражение “*” не может быть использовано в предложении THEN.
Вместо этого обычно используется любое константное значение не равное NULL.
COUNT(*) FILTER(WHERE <condition>)
и
SUM(CASE WHEN <condition> THEN 1 END)
SELECT
invoice_year,
SUM(revenue) FILTER (WHERE invoice_month = 1) AS jan_revenue,
SUM(revenue) FILTER (WHERE invoice_month= 2) AS feb_revenue,
...
SUM(revenue) FILTER (WHERE invoice_month = 12) AS dec_revenue
FROM (
SELECT
EXTRACT(YEAR FROM invoices.invoice_date) AS invoice_year,
EXTRACT(MONTH FROM invoices.invoice_date) AS invoice_month,
invoices.revenue AS revenue
FROM invoices
)
GROUP BY invoice_yearDSQL
AVG([ALL | DISTINCT] <expr>)
| Параметр | Описание |
|---|---|
expr |
Выражение. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. |
зависит от типа аргумента функции.
Функция AVG возвращает среднее значение для группы. Значения NULL пропускаются.
-
Параметр
ALL(по умолчанию) применяет агрегатную функцию ко всем значениям. -
Параметр
DISTINCTуказывает на то, что функцияAVGбудет выполнена только для одного экземпляра каждого уникального значения, независимо от того, сколько раз встречается это значение. -
В случае если выборка записей пустая или содержит только значения
NULL, результат будет содержатьNULL.
AVG в зависимости от типа аргумента
| Тип входного аргумента | Тип результат функции |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SELECT
dept_no,
AVG(salary)
FROM employee
GROUP BY dept_noDSQL
COUNT([ALL | DISTINCT] <expr> | *)
| Параметр | Описание |
|---|---|
expr |
Выражение. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. |
BIGINT
Функция COUNT возвращает количество значений в группе, которые не являются NULL.
-
По умолчанию используется
ALL: функция просто считает все значения в наборе, которые не равныNULL. -
Если указан
DISTINCTдубликаты исключаются из подсчитываемого набора. -
Если вместо выражения expr указано
COUNT (*), будут подсчитаны все записи.-
не может использоваться с ключевым словом
DISTINCT -
дубликаты записей не исключаются
-
при этом учитываются записи содержащие
NULL
-
-
Для пустой выборки данных или если при выборке окажутся одни значения, содержащие
NULL, функция возвратит значение равное0.
SELECT
dept_no,
COUNT(*) AS cnt,
COUNT(DISTINCT name) AS cnt_name
FROM employee
GROUP BY dept_noDSQL
LIST([ALL | DISTINCT] <expr> [, separator])
| Параметр | Описание |
|---|---|
expr |
Выражение.
Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает строковый тип данных или |
separator |
Разделитель. Выражение строкового типа. По умолчанию разделителем является запятая. |
BLOB
Функция LIST возвращает строку, состоящую из значений аргумента, отличных от NULL в группе,
разделенных запятой или заданным пользователем разделителем.
Если нет значений, отличных от NULL (включая случай, когда группа пуста), возвращается NULL.
-
ALL(по умолчанию) приводит к обработке всех значений, отличных отNULL. Если указано ключевое словоDISTINCT, то дубликаты удаляются, за исключением случаев, когда expr являетсяBLOB. -
Необязательный аргумент separator может быть любым строковым выражением. Это позволяет указать, например, ascii_char (13) в качестве разделителя.
-
Аргументы expr и separator поддерживают
BLOBлюбого размера и набора символов. -
Дата / время и числовые аргументы неявно преобразуются в строки перед объединением.
-
Результатом функции является текстовый
BLOB, кроме случаев, когда expr являетсяBLOBдругого подтипа. -
Порядок значений в списке не определен — порядок, в котором строки объединяются, определяется порядком чтения из исходного набора данных. Для таблиц такой порядок обычно не определяется. Если порядок важен, исходные данные можно предварительно отсортировать используя производную таблицы или аналогичное средство.
Получение списка, порядок не определён.
SELECT LIST (display_name, '; ')
FROM GR_WORK;Получение списка в алфавитном порядке.
SELECT LIST (display_name, '; ')
FROM (SELECT display_name
FROM GR_WORK
ORDER BY display_name);DSQL
MAX([ALL | DISTINCT] <expr>)
| Параметр | Описание |
|---|---|
expr |
Выражение. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. |
тот же что и аргумент функции expr.
Функция MAX возвращает максимальный элемент выборки, которые не равны NULL.
-
Если группа пуста или содержит только
NULL, результатом будетNULL. -
Если входным аргументом является строка, то функция вернет значение, которое будет последним в сортировке с использованием соответствующего
COLLATE. -
Эта функция полностью поддерживает текстовые
BLOBлюбого размера и набора символов.
|
Note
|
Параметр |
DSQL
MIN([ALL | DISTINCT] <expr>)
| Параметр | Описание |
|---|---|
expr |
Выражение. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. |
тот же что и аргумент функции expr
Функция MIN возвращает минимальный элемент выборки, которые не равны NULL.
-
Если группа пуста или содержит только
NULL, результатом будетNULL. -
Если входным аргументом является строка, то функция вернет значение, которое будет первым в сортировке с использованием соответствующего
COLLATE. -
Эта функция полностью поддерживает текстовые
BLOBлюбого размера и набора символов.
|
Note
|
Параметр |
DSQL
SUM([ALL | DISTINCT] <expr>)
SUM| Параметр | Описание |
|---|---|
expr |
Выражение. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. |
зависит от типа аргумента функции. Обычно, если это возможно, выбирается тип с большей вместимостью, чем тип выражения expr.
Функция SUM возвращает сумму элементов выборки, которые не равны NULL.
-
ALLявляется опцией по умолчанию — обрабатываются все значения из выборки, не содержащиеNULL. При указанииDISTINCTиз выборки устраняются дубликаты, после чего осуществляется суммирование. -
При пустой выборке, или при выборке из одних
NULLфункция возвратитNULL.
SUM в зависимости от типа аргумента
| Тип входного аргумента | Тип результат функции |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
SELECT
dept_no,
SUM(salary)
FROM employee
GROUP BY dept_noСтатистические функции являются агрегатными функциями.
Эти функции не учитывают значения NULL.
К аргументу статистической функции не применимы параметры ALL и DISTINCT.
Статистические функции часто используются совместно с предложением GROUP BY.
DSQL
CORR(<expr1>, <expr2>)
CORR| Параметр | Описание |
|---|---|
expr1, expr2 |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция CORR возвращает коэффициент корреляции для пары выражений, возвращающих числовые значения.
Функция CORR(<expr1>, <expr2>) эквивалентна
COVAR_POP(<expr1>, <expr2>) / (STDDEV_POP(<expr2>) * STDDEV_POP(<expr1>))
В статистическом смысле, корреляция — это степень связи между переменными. Связь между переменными означает, что значение одной переменной можно в определённой степени предсказать по значению другой. Коэффициент корреляции представляет степень корреляции в виде числа в диапазоне от -1 (высокая обратная корреляция) до 1 (высокая корреляция). Значение 0 соответствует отсутствию корреляции.
В случае если выборка записей пустая или содержит только значения NULL, результат будет содержать NULL.
SELECT
CORR(alength, aheight) AS c_corr
FROM measureDSQL
COVAR_POP(<expr1>, <expr2>)
COVAR_POP| Параметр | Описание |
|---|---|
expr1, expr2 |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция COVAR_POP возвращает ковариацию совокупности (population covariance) пар выражений с числовыми значениями.
Функция COVAR_POP(<expr1>, <expr2>) эквивалентна
(SUM(<expr1> * <expr2>) - SUM(<expr1>) * SUM(<expr2>) / COUNT(*)) / COUNT(*)
В случае если выборка записей пустая или содержит только значения NULL, результат будет содержать NULL.
COVAR_POPSELECT
COVAR_POP(alength, aheight) AS c_corr
FROM measureDSQL
COVAR_SAMP(<expr1>, <expr2>)
COVAR_SAMP| Параметр | Описание |
|---|---|
expr1, expr2 |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция COVAR_SAMP возвращает выборочную ковариацию (sample covariance) пары выражений с числовыми значениями.
Функция COVAR_SAMP(<expr1>, <expr2>) эквивалентна
(SUM(<expr1> * <expr2>) - SUM(<expr1>) * SUM(<expr2>) / COUNT(*)) / (COUNT(*) - 1)
В случае если выборка записей пустая, содержит только 1 запись или содержит только значения NULL, результат будет содержать NULL.
COVAR_SAMPSELECT
COVAR_SAMP(alength, aheight) AS c_corr
FROM measureDSQL
STDDEV_POP(<expr>)
| Параметр | Описание |
|---|---|
expr |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION или NUMERIC в зависимости от типа expr.
Функция STDDEV_POP возвращает среднеквадратичное отклонение для группы.
Значения NULL пропускаются.
Функция STDDEV_POP(<expr>) эквивалентна
SQRT(VAR_POP(<expr>))
В случае если выборка записей пустая или содержит только значения NULL, результат будет содержать NULL.
STDDEV_POPSELECT
dept_no,
STDDEV_POP(salary)
FROM employee
GROUP BY dept_noDSQL
STDDEV_SAMP(<expr>)
| Параметр | Описание |
|---|---|
expr |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION или NUMERIC в зависимости от типа expr
Функция STDDEV_SAMP возвращает стандартное отклонение для группы.
Значения NULL пропускаются.
Функция STDDEV_SAMP(<expr>) эквивалентна
SQRT(VAR_SAMP(<expr>))
В случае если выборка записей пустая, содержит только 1 запись или содержит только значения NULL, результат будет содержать NULL.
STDDEV_SAMPSELECT
dept_no,
STDDEV_SAMP(salary)
FROM employee
GROUP BY dept_noDSQL
VAR_POP(<expr>)
VAR_POP| Параметр | Описание |
|---|---|
expr |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION или NUMERIC в зависимости от типа expr
Функция VAR_POP возвращает выборочную дисперсию для группы.
Значения NULL пропускаются.
Функция VAR_POP(<expr>) эквивалентна
(SUM(<expr> * <expr>) - SUM(<expr>) * SUM(<expr>) / COUNT(<expr>)) / COUNT(<expr>)
В случае если выборка записей пустая или содержит только значения NULL, результат будет содержать NULL.
VAR_POPSELECT
dept_no,
VAR_POP(salary)
FROM employee
GROUP BY dept_noDSQL
VAR_SAMP(<expr>)
VAR_SAMP| Параметр | Описание |
|---|---|
expr |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION или NUMERIC в зависимости от типа expr
Функция VAR_SAMP возвращает несмещённую выборочную дисперсию для группы.
Значения NULL пропускаются.
Функция VAR_SAMP(<expr>) эквивалентна
(SUM(<expr> * <expr>) - SUM(<expr>) * SUM(<expr>) / COUNT(<expr>)) / (COUNT(<expr>) - 1)
В случае если выборка записей пустая, содержит только 1 запись или содержит только значения NULL, результат будет содержать NULL.
Функции линейной регрессии полезны для продолжения линии тренда. Линия тренда — это, как правило, закономерность, которой придерживается набор значений. Линия тренда полезна для прогнозирования будущих значений. Этот означает, что тренд будет продолжаться и в будущем. Для продолжения линии тренда необходимо знать угол наклона и точку пересечения с осью Y. Набор линейных функций включает функции для вычисления этих значений.
В синтаксисе функций, у интерпретируется в качестве переменной, зависящей от х.
DSQL
REGR_AVGX ( <y>, <x> )
| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция REGR_AVGX вычисляет среднее независимой переменной линии регрессии.
Функция REGR_AVGX(<y>, <x>) эквивалентна
SUM(<exprX>) / REGR_COUNT(<y>, <x>) <exprX> ::= CASE WHEN <x> IS NOT NULL AND <y> IS NOT NULL THEN <x> END
DSQL
REGR_AVGY(<y>, <x>)
REGR_AVGY| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция REGR_AVGY вычисляет среднее зависимой переменной линии регрессии.
Функция REGR_AVGY(<y>, <x>) эквивалентна
SUM(<exprY>) / REGR_COUNT(<y>, <x>) <exprY> ::= CASE WHEN <x> IS NOT NULL AND <y> IS NOT NULL THEN <y> END
DSQL
REGR_COUNT(<y>, <x>)
REGR_COUNT| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
BIGINT
Функция REGR_COUNT возвращает количество не пустых пар, используемых для создания линии регрессии.
Функция REGR_COUNT(<y>, <x>) эквивалентна
SUM(CASE WHEN <x> IS NOT NULL AND <y> IS NOT NULL THEN 1 END)
См. также:
SUM()
DSQL
REGR_INTERCEPT(<y>, <x>)
REGR_INTERCEPT| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция REGR_INTERCEPT вычисляет точку пересечения линии регрессии с осью Y.
Функция REGR_INTERCEPT(<y>, <x>) эквивалентна
REGR_AVGY(<y>, <x>) - REGR_SLOPE(<y>, <x>) * REGR_AVGX(<y>, <x>)
WITH RECURSIVE years(byyear) AS (
SELECT 1991 FROM rdb$database UNION ALL
SELECT byyear+1 FROM years WHERE byyear < 2020
),
s AS (
SELECT EXTRACT(YEAR FROM order_date) AS byyear,
SUM(total_value) AS total_value
FROM sales GROUP BY 1
),
regr AS (
SELECT REGR_INTERCEPT(total_value, byyear) as intercept,
REGR_SLOPE(total_value, byyear) as slope
FROM s)
SELECT years.byyear AS byyear,
intercept + (slope * years.byyear) AS total_value
FROM years CROSS JOIN regrBYYEAR TOTAL_VALUE ---------------------------- 1991 118377,35 1992 414557,62 1993 710737,89 1994 1006918,16 1995 1303098,43 1996 1599278,69 1997 1895458,96 1998 2191639,23 1999 2487819,50 2000 2783999,77 ...
DSQL
REGR_R2(<y>, <x>)
REGR_R2| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция REGR_R2 вычисляет коэффициент детерминации, или R-квадрат, линии регрессии.
Функция REGR_R2(<y>, <x>) эквивалентна
POWER(CORR(<y>, <x>), 2)
DSQL
REGR_SLOPE(<y>, <x>)
REGR_SLOPE| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Функция REGR_SLOPE вычисляет угол наклона линии регрессии.
Функция REGR_SLOPE(<y>, <x>) эквивалентна
COVAR_POP(<y>, <x>) / VAR_POP(<exprX>) <exprX> :== CASE WHEN <x> IS NOT NULL AND <y> IS NOT NULL THEN <x> END
DSQL
REGR_SXX(<y>, <x>)
REGR_SXX| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Диагностическая статистика, используемая для анализа регрессии.
Функция REGR_SXX(<y>, <x>) вычисляется следующим образом:
REGR_COUNT(<y>, <x>) * VAR_POP(<exprX>) <exprX> :== CASE WHEN <x> IS NOT NULL AND <y> IS NOT NULL THEN <x> END
DSQL
REGR_SXY(<y>, <x>)
REGR_SXY| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Диагностическая статистика, используемая для анализа регрессии.
Функция REGR_SXY(<y>, <x>) вычисляется следующим образом:
REGR_COUNT(<y>, <x>) * COVAR_POP(<y>, <x>)
DSQL
REGR_SYY(<y>, <x>)
REGR_SYY| Параметр | Описание |
|---|---|
y |
Зависимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
x |
Независимая переменная линии регрессии. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
Диагностическая статистика, используемая для анализа регрессии.
Функция REGR_SYY(<y>, <x>) вычисляется следующим образом:
REGR_COUNT(<y>, <x>) * VAR_POP(<exprY>) <exprY> :== CASE WHEN <x> IS NOT NULL AND <y> IS NOT NULL THEN <y> END