Арифметические функции

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

Примеры использования:

SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0)
Визуализация ожидаемого результата запроса
toTypeName(0) toTypeName(plus(0, 0)) toTypeName(plus(plus(0, 0), 0)) toTypeName(plus(plus(plus(0, 0), 0), 0))

UInt8

UInt16

UInt32

UInt64

Арифметические функции работают для любой пары типов из UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64. Переполнение обрабатывается аналогично C++.

Использование функций multiplyDecimal и divideDecimal предпочтительнее в ситуациях, когда необходима высокая точность вычислений и контроль за размером дробной части. В то же время следует учитывать, что эти функции могут работать медленнее стандартных арифметических функций multiply и divide.

Набор поддерживаемых функций RQL и их поведение зависят от версии установленного ClickHouse. Если функция не поддерживается в используемой версии ClickHouse, она также не будет доступна в RQL.

Ознакомиться с актуальным списком функций и их поведением можно в официальной документации ClickHouse.

Обратите внимание, что для функций в официальной документации ClickHouse может быть указана версия, в которой эти функции были введены. Это позволит определить, доступна ли рассматриваемая функция в вашей версии ClickHouse.

Арифметические функции
Функция Описание

abs(a)

Возвращает абсолютное значение числа a. Для беззнаковых типов ничего не изменяет.

divide(a, b)

Вычисляет частное чисел a и b. Результат всегда с плавающей запятой. Для целочисленного деления используйте intDiv.

divideDecimal(a, b[, result_scale])

Делит два числа типа Decimal, позволяя контролировать размер дробной части результата через result_scale.

gcd(a, b)

Вычисляет наибольший общий делитель чисел a и b.

intDiv(a, b)

Вычисляет целочисленное частное чисел a и b с округлением вниз.

intDivOrZero(a, b)

Аналог intDiv, но возвращает ноль при делении на ноль или при определенных условиях переполнения.

lcm(a, b)

Вычисляет наименьшее общее кратное чисел a и b.

max2(value1, value2)

Сравнивает числа value1 и value2, возвращая максимальное значение. Результат приводится к Float64.

min2(value1, value2)

Сравнивает числа value1 и value2, возвращая минимальное значение. Результат приводится к Float64.

minus(a, b)

Вычисляет разность чисел a и b. Поддерживает вычитание целых чисел из даты и даты с временем, аналогично plus.

modulo(a, b)

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

moduloOrZero(a, b)

Аналог modulo, но возвращает ноль при делении на ноль.

multiply(a, b)

Вычисляет произведение чисел a и b.

multiplyDecimal(a, b[, result_scale])

Умножает два числа типа Decimal, позволяя контролировать размер дробной части результата через result_scale.

negate(a)

Вычисляет число, обратное по знаку к a.

plus(a, b)

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

Была ли полезна эта страница?

Обратная связь