Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Агрегатные функции, за исключением 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_year
DSQL
AVG([ALL | DISTINCT] <expr>)
Параметр | Описание |
---|---|
expr |
Выражение. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
, DECFLOAT
или масштабируемое целое (INTEGER
, BIGINT
или INT128
) в зависимости от типа аргумента функции expr.
Функция AVG
возвращает среднее значение для группы.
Значения NULL
пропускаются.
-
Параметр
ALL
(по умолчанию) применяет агрегатную функцию ко всем значениям. -
Параметр
DISTINCT
указывает на то, что функцияAVG
будет выполнена только для одного экземпляра каждого уникального значения, независимо от того, сколько раз встречается это значение. -
В случае если выборка записей пустая или содержит только значения
NULL
, результат будет содержатьNULL
.
SELECT
dept_no,
AVG(salary)
FROM employee
GROUP BY dept_no
DSQL
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_no
DSQL
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, которая возвращает числовой тип данных. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
, DECFLOAT
или масштабируемое целое (INTEGER
, BIGINT
или INT128
) в зависимости от типа аргумента функции expr.
Обычно, если это возможно, выбирается тип с большей вместимостью, чем тип выражения expr.
Функция SUM
возвращает сумму элементов выборки, которые не равны NULL
.
-
ALL
является опцией по умолчанию — обрабатываются все значения из выборки, не содержащиеNULL
. При указанииDISTINCT
из выборки устраняются дубликаты, после чего осуществляется суммирование. -
При пустой выборке, или при выборке из одних
NULL
функция возвратитNULL
.
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 measure
DSQL
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_POP
SELECT
COVAR_POP(alength, aheight) AS c_corr
FROM measure
DSQL
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_SAMP
SELECT
COVAR_SAMP(alength, aheight) AS c_corr
FROM measure
DSQL
STDDEV_POP(<expr>)
Параметр | Описание |
---|---|
expr |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
или NUMERIC
в зависимости от типа expr.
Функция STDDEV_POP
возвращает среднеквадратичное отклонение для группы.
Значения NULL
пропускаются.
Функция STDDEV_POP(<expr>)
эквивалентна
SQRT(VAR_POP(<expr>))
В случае если выборка записей пустая или содержит только значения NULL
, результат будет содержать NULL
.
STDDEV_POP
SELECT
dept_no,
STDDEV_POP(salary)
FROM employee
GROUP BY dept_no
DSQL
STDDEV_SAMP(<expr>)
Параметр | Описание |
---|---|
expr |
Выражение возвращает числовой тип данных. Может содержать столбец таблицы, константу, переменную, выражение, неагрегатную функцию или UDF. Агрегатные функции в качестве выражения не допускаются. |
DOUBLE PRECISION
или NUMERIC
в зависимости от типа expr
Функция STDDEV_SAMP
возвращает стандартное отклонение для группы.
Значения NULL
пропускаются.
Функция STDDEV_SAMP(<expr>)
эквивалентна
SQRT(VAR_SAMP(<expr>))
В случае если выборка записей пустая, содержит только 1 запись или содержит только значения NULL
, результат будет содержать NULL
.
STDDEV_SAMP
SELECT
dept_no,
STDDEV_SAMP(salary)
FROM employee
GROUP BY dept_no
DSQL
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_POP
SELECT
dept_no,
VAR_POP(salary)
FROM employee
GROUP BY dept_no
DSQL
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 regr
BYYEAR 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