* DOCSUP-2806: Add meta intro. * DOCSUP-2806: Update meta intro. * DOCSUP-2806: Fix meta. * DOCSUP-2806: Add quotes for meta headers. * DOCSUP-2806: Remove quotes from meta headers. * DOCSUP-2806: Add meta headers. * DOCSUP-2806: Fix quotes in meta headers. * DOCSUP-2806: Update meta headers. * DOCSUP-2806: Fix link to nowhere in EN. * DOCSUP-2806: Fix link (settings to tune) * DOCSUP-2806: Fix links. * DOCSUP-2806:Fix links EN * DOCSUP-2806: Fix build errors. * DOCSUP-2806: Fix meta intro. * DOCSUP-2806: Fix toc_priority in examples datasets TOC. * DOCSUP-2806: Fix items order in toc. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc order. * DOCSUP-2806: Fix order in toc. * DOCSUP-2806: Fix toc index in create * DOCSUP-2806: Fix toc order in create. Co-authored-by: romanzhukov <romanzhukov@yandex-team.ru> Co-authored-by: alexey-milovidov <milovidov@yandex-team.ru>
4.0 KiB
toc_priority | toc_title |
---|---|
43 | Условные функции |
Условные функции
if
Условное выражение. В отличии от большинства систем, ClickHouse всегда считает оба выражения then
и else
.
Синтаксис
SELECT if(cond, then, else)
Если условие cond
не равно нулю, то возвращается результат выражения then
. Если условие cond
равно нулю или является NULL, то результат выражения then
пропускается и возвращается результат выражения else
.
Параметры
cond
– Условие, которое может быть равно 0 или нет. Может быть UInt8 илиNULL
.then
- Возвращается результат выражения, если условиеcond
истинно.else
- Возвращается результат выражения, если условиеcond
ложно.
Возвращаемые значения
Функция выполняет выражения then
или else
и возвращает его результат, в зависимости от того, было ли условие cond
равно нулю или нет.
Пример
Запрос:
SELECT if(1, plus(2, 2), plus(2, 6))
Ответ:
┌─plus(2, 2)─┐
│ 4 │
└────────────┘
Запрос:
SELECT if(0, plus(2, 2), plus(2, 6))
Ответ:
┌─plus(2, 6)─┐
│ 8 │
└────────────┘
Тернарный оператор
Работает так же, как функция if
.
Синтаксис: cond ? then : else
Возвращает then
, если cond
верно (больше нуля), в остальных случаях возвращает else
.
-
cond
должно быть типаUInt8
,then
иelse
должны относиться к наименьшему общему типу. -
then
иelse
могут бытьNULL
.
Смотрите также
multiIf
Позволяет более компактно записать оператор CASE в запросе.
multiIf(cond_1, then_1, cond_2, then_2...else)
Параметры
cond_N
— Условие, при выполнении которого функция вернётthen_N
.then_N
— Результат функции при выполнении.else
— Результат функции, если ни одно из условий не выполнено.
Функция принимает 2N+1
параметров.
Возвращаемые значения
Функция возвращает одно из значений then_N
или else
, в зависимости от условий cond_N
.
Пример
Рассмотрим таблицу
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
Выполним запрос SELECT multiIf(isNull(y), x, y < 3, y, NULL) FROM t_null
. Результат:
┌─multiIf(isNull(y), x, less(y, 3), y, NULL)─┐
│ 1 │
│ ᴺᵁᴸᴸ │
└────────────────────────────────────────────┘