Перейти к содержимому

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

Агрегатные функции сводят много строк к одному числу. Чаще всего они нужны в расчёте значения виджета. Там каждое поле обязано стоять внутри агрегата: SUM([Расходы.Сумма]).

Обычно агрегат выбирают не формулой, а в строке «Как» конструктора показателя: «Сложить», «Среднее», «Наибольшее», «Наименьшее», «Последнее по дате», «Посчитать записи». См. «Как виджет считает значение».

Сумма по всем строкам. Пустые значения пропускаются.

SUM([Расходы.Сумма])
СУММ([Сделки.Количество] * [Сделки.Цена])

Если значений нет, вернёт 0.

Среднее арифметическое. Пустые значения пропускаются. Если значений нет, результат пустой.

AVG([Объекты.Аренда в месяц])

Число строк, где выражение не пустое.

COUNT([Платежи.Дата платежа]) // сколько платежей с датой

Сумма только положительных значений, то есть «приход». Если таких нет, вернёт 0.

SUMPOS([Операции.Сумма])

Сумма отрицательных значений по модулю, то есть «расход». Возвращает положительное число, чтобы виджет мог показать «Расход: 12 345 ₽». Если таких нет, вернёт 0.

SUMNEG([Операции.Сумма])

sumpos(x) - sumneg(x) равно обычному sum(x).

В формуле виджета MIN([Таблица.Поле]) и MAX([Таблица.Поле]) с одним аргументом работают как агрегаты: наименьшее и наибольшее значение колонки. С несколькими аргументами (min(a, b, c)) это обычные скалярные функции.

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

  • Пустая таблица: sum, sumpos, sumneg, count вернут 0, avg вернёт пусто.
  • Агрегат внутри агрегата не работает: «Агрегат внутри агрегата не поддерживается».
  • В одном агрегате можно брать поля только одной таблицы. Чтобы сложить данные двух таблиц, используйте два агрегата: SUM([Аренда.Платёж]) - SUM([Расходы.Сумма]).
  • Фильтр внутри функции. sum(amount where …) не бывает. Отбор строк делается условием «Какие записи» в настройке виджета или функцией if внутри агрегата: SUM(IF([Операции.Категория] == "Аренда", [Операции.Сумма], 0)).
  • sum по тексту. Смысла нет. Для подсчёта строк берите count.