Условные функции
if
Выполняет условную ветвление.
Если условие cond
оценивается как ненулевое значение, функция возвращает результат выражения then
. Если cond
оценивается как ноль или NULL
, возвращается результат выражения else
.
Настройка short_circuit_function_evaluation управляет использованием короткой оценки (short-circuit evaluation). Если включено, выражение then
оценивается только для строк, где cond
истинно, а выражение else
- где cond
ложно. Например, при использовании короткой оценки не возникает исключение деления на ноль при выполнении запроса SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10)
.
then
и else
должны быть одного типа.
Синтаксис
Псевдоним: cond ? then : else
(тернарный оператор)
Аргументы
cond
– Оцениваемое условие. UInt8, Nullable(UInt8) или NULL.then
– Выражение, возвращаемое, еслиcondition
истинно.else
– Выражение, возвращаемое, еслиcondition
ложно или NULL.
Возвращаемые значения
Результат либо выражения then
, либо else
, в зависимости от условия cond
.
Пример
Результат:
multiIf
Позволяет написать оператор CASE более компактно в запросе.
Синтаксис
Настройка short_circuit_function_evaluation управляет использованием короткой оценки. Если включено, выражение then_i
оценивается только для строк, где ((NOT cond_1) AND (NOT cond_2) AND ... AND (NOT cond_{i-1}) AND cond_i)
истинно, cond_i
будет оцениваться только для строк, где ((NOT cond_1) AND (NOT cond_2) AND ... AND (NOT cond_{i-1}))
истинно. Например, при использовании короткой оценки не возникает исключение деления на ноль при выполнении запроса SELECT multiIf(number = 2, intDiv(1, number), number = 5) FROM numbers(10)
.
Аргументы
Функция принимает 2N+1
параметров:
cond_N
— N-е оцениваемое условие, которое определяет, вернется лиthen_N
.then_N
— Результат функции, когдаcond_N
истинно.else
— Результат функции, если ни одно из условий не истинно.
Возвращаемые значения
Результат либо любого из выражений then_N
, либо else
, в зависимости от условий cond_N
.
Пример
Предположим, эта таблица:
Прямое использование условий
Условия всегда возвращают 0
, 1
или NULL
. Поэтому вы можете использовать результаты условий напрямую, как это:
NULL значения в условиях
Когда в условиях участвуют NULL
значения, результат также будет NULL
.
Поэтому вы должны аккуратно строить свои запросы, если типы Nullable
.
Следующий пример демонстрирует это, не добавляя условие равенства в multiIf
.
greatest
Возвращает наибольшее значение из списка значений. Все члены списка должны быть сопоставимыми по типу.
Примеры:
Возвращаемый тип - Float64, так как UInt8 должен быть повышен до 64 бит для сравнения.
Возвращаемый тип - DateTime64, так как DateTime32 должен быть повышен до 64 бит для сравнения.
least
Возвращает наименьшее значение из списка значений. Все члены списка должны быть сопоставимыми по типу.
Примеры:
Возвращаемый тип - Float64, так как UInt8 должен быть повышен до 64 бит для сравнения.
Возвращаемый тип - DateTime64, так как DateTime32 должен быть повышен до 64 бит для сравнения.
clamp
Ограничивает возвращаемое значение между A и B.
Синтаксис
Аргументы
value
– Входное значение.min
– Ограничивает нижнюю границу.max
– Ограничивает верхнюю границу.
Возвращаемые значения
Если значение меньше минимально допустимого, возвращается минимальное значение; если оно больше максимального, возвращается максимальное значение; в противном случае возвращается текущее значение.
Примеры: