Условные функции
if
Условное выражение. В отличие от большинства систем, ClickHouse всегда считает оба выражения then и else.
Синтаксис
Если условие cond не равно нулю, то возвращается результат выражения then. Если условие cond равно нулю или является NULL, то результат выражения then пропускается и возвращается результат выражения else.
Чтобы вычислять функцию if по короткой схеме, используйте настройку short_circuit_function_evaluation. Если настройка включена, то выражение then вычисляется только для строк, где условие cond верно, а выражение else – для строк, где условие cond неверно. Например, при выполнении запроса SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10) не будет сгенерировано исключение из-за деления на ноль, так как intDiv(42, number) будет вычислено только для чисел, которые не удовлетворяют условию number = 0.
Аргументы
cond– проверяемое условие. Может быть UInt8 илиNULL.then– возвращается результат выражения, если условиеcondистинно.else– возвращается результат выражения, если условиеcondложно.
Возвращаемые значения
Функция выполняет выражения then или else и возвращает его результат, в зависимости от того, было ли условие cond равно нулю или нет.
Пример
Запрос:
Результат:
Запрос:
Результат:
Тернарный оператор
Работает так же, как функция if.
Синтаксис: cond ? then : else
Возвращает then, если cond верно (больше нуля), в остальных случаях возвращает else.
-
condдолжно быть типаUInt8,thenиelseдолжны относиться к наименьшему общему типу. -
thenиelseмогут бытьNULL.
Смотрите также
multiIf
Позволяет более компактно записать оператор CASE в запросе.
Синтаксис
Чтобы вычислять функцию multiIf по короткой схеме, используйте настройку 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) не будет сгенерировано исключение из-за деления на ноль.
Аргументы
cond_N— условие, при выполнении которого функция вернётthen_N.then_N— результат функции при выполнении.else— результат функции, если ни одно из условий не выполнено.
Функция принимает 2N+1 параметров.
Возвращаемые значения
Функция возвращает одно из значений then_N или else, в зависимости от условий cond_N.
Пример
Рассмотрим таблицу
Выполним запрос SELECT multiIf(isNull(y), x, y < 3, y, NULL) FROM t_null. Результат: