×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.6.21. Агрегатные функции

Агрегатные функции Агрегатные функции вычисляют единичный результат на основе набора входных значений. Встроенные агрегатные функции общего назначения перечислены в Таблица 2.6.60 в то время как статистические агрегатные функции приведены в Таблица 2.6.61. Встроенные агрегатные функции для упорядоченных наборов (ordered-set aggregate functions), работающие внутри групп, перечислены в Таблица 2.6.62 а встроенные агрегатные функции гипотетического набора (within-group hypothetical-set) — в Таблица 2.6.63. Операции группировки, которые тесно связаны с агрегатными функциями, перечислены в Таблица 2.6.64. Специальные синтаксические аспекты применения агрегатных функций описаны в Раздел 2.1.2.7. Обратитесь к Раздел 1.2.7 для получения дополнительной вводной информации.

Агрегатные функции, поддерживающие Partial Mode могут использоваться в различных оптимизациях, таких как параллельная агрегация.

Хотя все указанные ниже агрегатные функции поддерживают необязательное ORDER BY предложение (как описано в Раздел 2.1.2.7), оно было добавлено только для тех функций, на результат которых влияет порядок сортировки.

Таблица 2.6.60. Агрегатные функции общего назначения

Функция

Описание

Partial Mode

any_value ( anyelement ) → совпадает с типом входных данных

Возвращает произвольное значение из набора входных данных, не содержащих NULL.

Да

array_agg ( anynonarray ORDER BY input_sort_columns ) → anyarray

Собирает все входные значения, включая NULL, в массив.

Да

array_agg ( anyarray ORDER BY input_sort_columns ) → anyarray

Выполняет объединение всех входных массивов в массив, размерность которого на единицу больше. (Все входные массивы должны иметь одинаковую размерность и не могут быть пустыми или иметь значение NULL.)

Да

avg ( smallint ) → numeric

avg ( integer ) → numeric

avg ( bigint ) → numeric

avg ( numeric ) → numeric

avg ( real ) → double precision

avg ( double precision ) → double precision

avg ( interval ) → interval

Вычисляет среднее значение (арифметическое среднее) всех входных значений, отличных от NULL.

Да

bit_and ( smallint ) → smallint

bit_and ( integer ) → integer

bit_and ( bigint ) → bigint

bit_and ( bit ) → bit

Вычисляет поразрядное И (AND) всех входных значений, отличных от NULL.

Да

bit_or ( smallint ) → smallint

bit_or ( integer ) → integer

bit_or ( bigint ) → bigint

bit_or ( bit ) → bit

Вычисляет поразрядное ИЛИ (OR) всех входных значений, отличных от NULL.

Да

bit_xor ( smallint ) → smallint

bit_xor ( integer ) → integer

bit_xor ( bigint ) → bigint

bit_xor ( bit ) → bit

Вычисляет поразрядное исключающее ИЛИ (XOR) всех входных значений, отличных от NULL. Может использоваться в качестве контрольной суммы для неупорядоченного набора значений.

Да

bool_and ( boolean ) → boolean

Возвращает true, если все отличные от NULL входные значения истинны, иначе возвращает false.

Да

bool_or ( boolean ) → boolean

Возвращает true, если хотя бы одно отличное от NULL входное значение истинно, иначе возвращает false.

Да

count ( * ) → bigint

Вычисляет общее количество входных строк.

Да

count ( "any" ) → bigint

Вычисляет количество входных строк, в которых входное значение не является NULL.

Да

каждый ( boolean ) → boolean

Данное выражение является эквивалентом стандарта SQL для bool_and.

Да

json_agg ( anyelement ORDER BY input_sort_columns ) → json

jsonb_agg ( anyelement ORDER BY input_sort_columns ) → jsonb

Агрегирует все входные значения, включая значения NULL, в массив JSON. Значения преобразуются в формат JSON в соответствии с правилами to_json или to_jsonb.

Нет

json_agg_strict ( anyelement ) → json

jsonb_agg_strict ( anyelement ) → jsonb

Агрегирует все входные значения, пропуская значения NULL, в массив JSON. Значения преобразуются в формат JSON в соответствии с правилами to_json или to_jsonb.

Нет

json_arrayagg ( [ value_expression ] [ ORDER BY sort_expression ] [ { NULL | ABSENT } ON NULL ] [ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ])

Функция работает так же, как и функция json_array , но в качестве агрегатной функции, поэтому она принимает только один value_expression параметр. Если ABSENT ON NULL указано, любые значения NULL будут пропущены. Если ORDER BY указано, элементы будут располагаться в массиве в данном порядке, а не в порядке поступления.

SELECT json_arrayagg(v) FROM (VALUES(2),(1)) t(v)[2, 1]

Нет

json_objectagg ( [ { key_expression { VALUE | ':' } value_expression } ] [ { NULL | ABSENT } ON NULL ] [ { WITH | WITHOUT } UNIQUE [ KEYS ] ] [ RETURNING data_type [ FORMAT JSON [ ENCODING UTF8 ] ] ])

Работает аналогично функции json_object, но в качестве агрегатной функции, поэтому она принимает только один key_expression и один value_expression параметр.

SELECT json_objectagg(k:v) FROM (VALUES ('a'::text,current_date),('b',current_date + 1)) AS t(k,v){ "a" : "2022-05-10", "b" : "2022-05-11" }

Нет

json_object_agg ( ключ "any", значение "any" ORDER BY input_sort_columns ) → json

jsonb_object_agg ( ключ "any", значение "any" ORDER BY input_sort_columns ) → jsonb

Собирает все пары «ключ-значение» в объект JSON. Аргументы-ключи приводятся к текстовому типу text; аргументы-значения преобразуются в соответствии с to_json или to_jsonb. Значения могут принимать значение NULL, но ключи — нет.

Нет

json_object_agg_strict ( ключ "any", значение "any" ) → json

jsonb_object_agg_strict ( ключ "any", значение "any" ) → jsonb

Собирает все пары «ключ-значение» в объект JSON. Аргументы-ключи приводятся к текстовому типу text; аргументы-значения преобразуются в соответствии с to_json или to_jsonb. Данный ключ не могут принимать значение NULL. Если значение имеет значение NULL, то запись пропускается,

Нет

json_object_agg_unique ( ключ "any", значение "any" ) → json

jsonb_object_agg_unique ( ключ "any", значение "any" ) → jsonb

Собирает все пары «ключ-значение» в объект JSON. Аргументы-ключи приводятся к текстовому типу text; аргументы-значения преобразуются в соответствии с to_json или to_jsonb. Значения могут принимать значение NULL, но ключи — нет. В случае дублирования ключа возникает ошибка.

Нет

json_object_agg_unique_strict ( ключ "any", значение "any" ) → json

jsonb_object_agg_unique_strict ( ключ "any", значение "any" ) → jsonb

Собирает все пары «ключ-значение» в объект JSON. Аргументы-ключи приводятся к текстовому типу text; аргументы-значения преобразуются в соответствии с to_json или to_jsonb. Данный ключ не могут принимать значение NULL. Если значение имеет значение NULL, то соответствующая запись пропускается. В случае дублирования ключа возникает ошибка.

Нет

max ( см. текст ) → совпадает с типом входных данных

Вычисляет максимальное значение среди входных значений, не равных NULL. Функция доступна для любых числовых, строковых типов, типов даты/времени или перечислимых типов, а также для типов inet, interval, money, oid, pg_lsn, tid, xid8, и массивов любого из указанных типов.

Да

min ( см. текст ) → совпадает с типом входных данных

Вычисляет минимальное значение среди входных данных, отличных от null значений, не равных NULL. Функция доступна для любых числовых, строковых типов, типов даты/времени или перечислимых типов, а также для типов inet, interval, money, oid, pg_lsn, tid, xid8, и массивов любого из указанных типов.

Да

range_agg ( значение anyrange ) → anymultirange

range_agg ( значение anymultirange ) → anymultirange

Вычисляет объединение входных значений, отличных от null.

Нет

range_intersect_agg ( значение anyrange ) → anyrange

range_intersect_agg ( значение anymultirange ) → anymultirange

Вычисляет пересечение входных значений, отличных от null.

Нет

string_agg ( значение text, разделитель text ) → text

string_agg ( значение bytea, разделитель bytea ORDER BY input_sort_columns ) → bytea

Объединяет входные значения, отличные от null, в строку. Каждое значение после первого предваряется соответствующим разделителем разделитель (если он не равен null).

Да

sum ( smallint ) → bigint

sum ( integer ) → bigint

sum ( bigint ) → numeric

sum ( numeric ) → numeric

sum ( real ) → real

sum ( double precision ) → double precision

sum ( interval ) → interval

sum ( money ) → money

Вычисляет сумму входных значений, отличных от null.

Да

xmlagg ( xml ORDER BY input_sort_columns ) → xml

Выполняет конкатенацию входных XML-значений, отличных от null (см. Раздел 2.6.15.1.8).

Нет

Следует отметить, что за исключением count, данные функции возвращают значение null, если не выбрана ни одна строка. В частности, sum при отсутствии строк возвращает null, а не ноль, как можно было бы ожидать, и array_agg возвращает null вместо пустого массива при отсутствии входных строк. Функция coalesce может применяться для замены значения null нулем или пустым массивом при необходимости.

Агрегатные функции array_agg, json_agg, jsonb_agg, json_agg_strict, jsonb_agg_strict, json_object_agg, jsonb_object_agg, json_object_agg_strict, jsonb_object_agg_strict, json_object_agg_unique, jsonb_object_agg_unique, json_object_agg_unique_strict, jsonb_object_agg_unique_strict, string_agg, и xmlagg, а также аналогичные пользовательские агрегатные функции, формируют существенно различающиеся результирующие значения в зависимости от порядка следования входных данных. По умолчанию данный порядок не определен, однако им можно управлять с помощью ORDER BY предложения внутри вызова агрегатной функции, как показано в Раздел 2.1.2.7. Кроме того, обычно допустимым решением является передача входных значений из отсортированного подзапроса. Например:

SELECT xmlagg(x) FROM (SELECT x FROM test ORDER BY y DESC) AS tab;

Необходимо учитывать, что данный подход может оказаться неэффективным, если внешний уровень запроса содержит дополнительную обработку, например соединение (join), так как это может привести к переупорядочиванию выходных строк подзапроса перед выполнением агрегации.

Примечание

Логические агрегатные функции bool_and и bool_or соответствуют стандартным агрегатным функциям языка SQL каждый и any or some. Digital Q.DataBase поддерживает каждый, но не any OR some, так как в стандартном синтаксисе присутствует неоднозначность:

SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;

Здесь ANY может рассматриваться либо как введение подзапроса, либо как агрегатная функция, если данный подзапрос возвращает одну строку с логическим значением. Следовательно, этим агрегатным функциям невозможно присвоить стандартное имя.

Примечание

Пользователи, имеющие опыт работы с другими системами управления базами данных на языке SQL, могут быть не удовлетворены производительностью count агрегатной функции при ее применении ко всей таблице. Запрос вида:

SELECT count(*) FROM sometable;

потребует ресурсов, пропорциональных размеру таблицы: Digital Q.DataBase потребуется выполнить сканирование либо всей таблицы, либо всего индекса, содержащего все строки таблицы.

Таблица 2.6.61 В данной таблице представлены агрегатные функции, обычно используемые при проведении статистического анализа. (Они вынесены в отдельный раздел исключительно для того, чтобы не загромождать список более употребительных агрегатных функций.) Функции, для которых указано, что они принимают numeric_type доступны для всех типов данных smallint, integer, bigint, numeric, real, и double precision. В тех случаях, когда в описании упоминается N, это означает количество входных строк, в которых значения всех входных выражений отличны от NULL. Во всех случаях возвращается значение NULL, если выполнение вычисления не имеет смысла, например, когда N равно нулю.

Таблица 2.6.61. Агрегатные функции для статистики

Функция

Описание

Partial Mode

corr ( Y double precision, X double precision ) → double precision

Вычисляет коэффициент корреляции.

Да

covar_pop ( Y double precision, X double precision ) → double precision

Вычисляет ковариацию для генеральной совокупности.

Да

covar_samp ( Y double precision, X double precision ) → double precision

Вычисляет выборочную ковариацию.

Да

regr_avgx ( Y double precision, X double precision ) → double precision

Вычисляет среднее значение независимой переменной, sum(X)/N.

Да

regr_avgy ( Y double precision, X double precision ) → double precision

Вычисляет среднее значение зависимой переменной, sum(Y)/N.

Да

regr_count ( Y double precision, X double precision ) → bigint

Вычисляет количество строк, в которых оба входных значения отличны от null.

Да

regr_intercept ( Y double precision, X double precision ) → double precision

Вычисляет значение свободного члена (y-intercept) для уравнения линейной регрессии, построенного методом наименьших квадратов определяемого набором (X, Y) пар.

Да

regr_r2 ( Y double precision, X double precision ) → double precision

Вычисляет квадрат коэффициента корреляции.

Да

regr_slope ( Y double precision, X double precision ) → double precision

Вычисляет коэффициент наклона уравнения линейной регрессии, построенного методом наименьших квадратов и определяемого набором (X, Y) пар.

Да

regr_sxx ( Y double precision, X double precision ) → double precision

Вычисляет «сумму квадратов» независимой переменной, sum(X^2) - sum(X)^2/N.

Да

regr_sxy ( Y double precision, X double precision ) → double precision

Вычисляет «сумму произведений» независимых и зависимых переменных, sum(X*Y) - sum(X) * sum(Y)/N.

Да

regr_syy ( Y double precision, X double precision ) → double precision

Вычисляет «сумму квадратов» зависимой переменной переменной, sum(Y^2) - sum(Y)^2/N.

Да

среднеквадратическое отклонение ( numeric_type ) → double precision в real или double precision, в противном случае numeric

Данное имя является устаревшим псевдонимом для stddev_samp.

Да

stddev_pop ( numeric_type ) → double precision в real или double precision, в противном случае numeric

Вычисляет среднеквадратическое отклонение по генеральной совокупности для входных значений.

Да

stddev_samp ( numeric_type ) → double precision в real или double precision, в противном случае numeric

Вычисляет выборочное среднеквадратическое отклонение для входных значений.

Да

дисперсия ( numeric_type ) → double precision в real или double precision, в противном случае numeric

Данное имя является устаревшим псевдонимом для var_samp.

Да

var_pop ( numeric_type ) → double precision в real или double precision, в противном случае numeric

Вычисляет дисперсию по генеральной совокупности для входных значений (квадрат среднеквадратического отклонения по генеральной совокупности).

Да

var_samp ( numeric_type ) → double precision в real или double precision, в противном случае numeric

Вычисляет выборочную дисперсию для входных значений (квадрат выборочного среднеквадратического отклонения).

Да

Таблица 2.6.62 приведены некоторые агрегатные функции, использующие агрегатных функций внутригрупповой сортировки синтаксис. Данные функции иногда называют функциями «обратного распределения» часовой пояс. Их агрегируемые входные данные вводятся предложением ORDER BY, также они могут принимать прямой аргумент который не агрегируется, а вычисляется только один раз. Все эти функции игнорируют значения null во входных агрегируемых данных. Для функций, принимающих доля параметр, значение аргумента fraction должно находиться в диапазоне от 0 до 1; в противном случае возвращается ошибка. При этом значение null доля просто возвращает результат null.

Таблица 2.6.62. Агрегатные функции упорядоченного набора

Функция

Описание

Partial Mode

мода () WITHIN GROUP ( ORDER BY anyelement ) → anyelement

Вычисляет мода, наиболее часто встречающееся значение агрегированного аргумента (произвольно выбирается первое, если имеется несколько одинаково часто встречающихся значений). Агрегируемый аргумент должен принадлежать к сортируемому типу данных.

Нет

percentile_cont ( доля double precision ) WITHIN GROUP ( ORDER BY double precision ) → double precision

percentile_cont ( доля double precision ) WITHIN GROUP ( ORDER BY interval ) → interval

Вычисляет непрерывный процентиль, значение соответствующее указанному доля в упорядоченном наборе агрегированных значений аргументов. Данная операция при необходимости выполняет интерполяцию между соседними входными элементами.

Нет

percentile_cont ( дробные значения double precision[] ) WITHIN GROUP ( ORDER BY double precision ) → double precision[]

percentile_cont ( дробные значения double precision[] ) WITHIN GROUP ( ORDER BY interval ) → interval[]

Вычисляет несколько непрерывных процентилей. Результатом является массив, имеющий ту же размерность, что и дробные значения параметр, в котором каждый элемент, не являющийся NULL, заменен (возможно, интерполированным) значением, соответствующим данному процентилю.

Нет

percentile_disc ( доля double precision ) WITHIN GROUP ( ORDER BY anyelement ) → anyelement

Вычисляет дискретный процентиль, первое значение в упорядоченном наборе агрегированных значений аргументов, чья позиция в последовательности не меньше значения указанного доля. Агрегированные аргумент должен принадлежать к сортируемому типу данных.

Нет

percentile_disc ( дробные значения double precision[] ) WITHIN GROUP ( ORDER BY anyelement ) → anyarray

Вычисляет несколько дискретных процентилей. Результат представляет собой массив той же размерности, что и у дробные значения параметра, в котором каждый элемент, не являющийся значением NULL, заменен входным значением, соответствующим этому процентилю. Агрегируемый аргумент должен принадлежать к типу данных, поддерживающему сортировку.

Нет

Каждая из «агрегатных функций для гипотетических наборов,» перечисленных в Таблица 2.6.63 , связана с одноименной оконной функцией, определенной в Раздел 2.6.22. В каждом случае результатом агрегата является значение, которое было бы возвращено соответствующей оконной функцией для «гипотетической» строки, сформированной на основе аргументов args, если бы такая строка была добавлена в отсортированную группу строк, представленную в sorted_args. Для каждой из этих функций список прямых аргументов, указанных в args должны соответствовать количеству и типам агрегируемых аргументов, указанных в sorted_args. В отличие от большинства встроенных агрегатных функций, данные агрегаты не являются строгими (strict), то есть они не игнорируют входные строки, содержащие значения NULL. Значения NULL сортируются согласно правилу, указанному в ORDER BY предложении.

Таблица 2.6.63. Агрегатные функции наборов гипотетических значений

Функция

Описание

Partial Mode

rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) → bigint

Вычисляет ранг гипотетической строки с пропусками; то есть номер первой строки в её группе равных строк.

Нет

dense_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) → bigint

Вычисляет ранг гипотетической строки без пропусков; эта функция фактически подсчитывает количество групп равных строк.

Нет

percent_rank ( args ) WITHIN GROUP ( ORDER BY sorted_args ) → double precision

Вычисляет относительный ранг гипотетической строки, то есть (rank - 1) / (общее количество строк - 1). Таким образом, полученное значение лежит в диапазоне от 0 до 1 включительно.

Нет

cume_dist ( args ) WITHIN GROUP ( ORDER BY sorted_args ) → double precision

Вычисляет кумулятивное распределение, то есть (количество строк, предшествующих гипотетической строке или равных ей) / (общее количество строк). Значение таким образом варьируется от 1/N в 1.

Нет

Таблица 2.6.64. Операции группировки

Функция

Описание

GROUPING ( выражения_группировки ) → integer

Возвращает битовую маску, указывающую на то, какие GROUP BY выражения не включены в текущий набор группировки. Биты распределяются таким образом, что самому правому аргументу соответствует самый младший бит; каждый бит равен 0, если соответствующее выражение включено в критерии группировки того набора группировки, который формирует текущую строку результата, и значение 1, если она не включена в результат.


Операции группировки, представленные в Таблица 2.6.64 используются в сочетании с наборами группирования grouping sets (см. Раздел 2.4.2.4) для идентификации результирующих строк. Аргументы функции GROUPING выражения функций фактически не вычисляются, однако они должны в точности соответствовать выражениям, указанным в GROUP BY предложении соответствующего уровня запроса. Например:

=> SELECT * FROM items_sold;
 make  | model | sales
-------+-------+-------
 Foo   | GT    |  10
 Foo   | Tour  |  20
 Bar   | City  |  15
 Bar   | Sport |  5
(4 строки)

=> SELECT make, model, GROUPING(make,model), sum(sales) FROM items_sold GROUP BY ROLLUP(make,model);
 make  | model | grouping | sum
-------+-------+----------+-----
 Foo   | GT    |        0 | 10
 Foo   | Tour  |        0 | 20
 Bar   | City  |        0 | 15
 Bar   | Sport |        0 | 5
 Foo   |       |        1 | 30
 Bar   |       |        1 | 20
       |       |        3 | 50
(7 строк)

В данном случае значение функции grouping 0 в первых четырех строках показывает, что данные были сгруппированы обычным образом по обоим столбцам группировки. Значение 1 указывает на то, что модель не использовалось при группировке в предпоследних двух строках, а значение 3 указывает на то, что ни одно из марка ни модель не использовалось при группировке в последней строке (которая, следовательно, представляет собой агрегат по всем входным строкам).

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению