ClickHouse/docs/ru/sql-reference/functions/conditional-functions.md

110 lines
3.9 KiB
Markdown
Raw Normal View History

# Условные функции {#uslovnye-funktsii}
## if {#if}
2020-02-02 22:08:48 +00:00
Условное выражение. В отличии от большинства систем, ClickHouse всегда считает оба выражения `then` и `else`.
**Синтаксис**
``` sql
SELECT if(cond, then, else)
```
2020-02-02 22:08:48 +00:00
Если условие `cond` не равно нулю, то возвращается результат выражения `then`. Если условие `cond` равно нулю или является NULL, то результат выражения `then` пропускается и возвращается результат выражения `else`.
**Параметры**
- `cond` Условие, которое может быть равно 0 или нет. Может быть [UInt8](../../sql-reference/functions/conditional-functions.md) или `NULL`.
- `then` - Возвращается результат выражения, если условие `cond` истинно.
- `else` - Возвращается результат выражения, если условие `cond` ложно.
**Возвращаемые значения**
Функция выполняет выражения `then` или `else` и возвращает его результат, в зависимости от того, было ли условие `cond` равно нулю или нет.
**Пример**
Запрос:
``` sql
SELECT if(1, plus(2, 2), plus(2, 6))
```
Ответ:
``` text
┌─plus(2, 2)─┐
│ 4 │
└────────────┘
```
Запрос:
``` sql
SELECT if(0, plus(2, 2), plus(2, 6))
```
Ответ:
``` text
┌─plus(2, 6)─┐
│ 8 │
└────────────┘
```
## Тернарный оператор {#ternary-operator}
Работает так же, как функция `if`.
Синтаксис: `cond ? then : else`
Возвращает `then`, если `cond` верно (больше нуля), в остальных случаях возвращает `else`.
- `cond` должно быть типа `UInt8`, `then` и `else` должны относиться к наименьшему общему типу.
- `then` и `else` могут быть `NULL`.
**Смотрите также**
- [ifNotFinite](other-functions.md#ifnotfinite).
## multiIf {#multiif}
Позволяет более компактно записать оператор [CASE](../operators/index.md#operator_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`.
**Пример**
Рассмотрим таблицу
``` text
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
```
Выполним запрос `SELECT multiIf(isNull(y), x, y < 3, y, NULL) FROM t_null`. Результат:
``` text
┌─multiIf(isNull(y), x, less(y, 3), y, NULL)─┐
│ 1 │
│ ᴺᵁᴸᴸ │
└────────────────────────────────────────────┘
```
2020-01-30 10:34:55 +00:00
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/conditional_functions/) <!--hide-->