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

Условные функции

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 – Ограничивает верхнюю границу.

Возвращаемые значения

Если значение меньше минимально допустимого, возвращается минимальное значение; если оно больше максимального, возвращается максимальное значение; в противном случае возвращается текущее значение.

Примеры: