2017-12-11 12:07:26 +00:00
# Условные функции
2017-03-12 17:58:51 +00:00
2019-11-12 20:49:04 +00:00
## if {#if}
2018-07-26 14:41:59 +00:00
2020-02-02 22:08:48 +00:00
Условное выражение. В отличии от большинства систем, ClickHouse всегда считает о б а выражения `then` и `else` .
2018-07-26 14:41:59 +00:00
2019-11-12 20:49:04 +00:00
**Синтаксис**
```sql
SELECT if(cond, then, else)
```
2020-02-02 22:08:48 +00:00
Если условие `cond` не равно нулю, то возвращается результат выражения `then` . Если условие `cond` равно нулю или является NULL, то результат выражения `then` пропускается и возвращается результат выражения `else` .
2019-11-12 20:49:04 +00:00
**Параметры**
- `cond` – Условие, которое может быть равно 0 или нет. Может быть [UInt8 ](../../data_types/int_uint.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 │
└────────────┘
```
2018-07-26 14:41:59 +00:00
## multiIf
2018-08-10 14:44:49 +00:00
Позволяет более компактно записать оператор [CASE ](../operators.md#operator_case ) в запросе.
2018-07-26 14:41:59 +00:00
```
multiIf(cond_1, then_1, cond_2, then_2...else)
```
**Параметры**
- `cond_N` — Условие, при выполнении которого функция вернёт `then_N` .
- `then_N` — Результат функции при выполнении.
- `else` — Результат функции, если ни одно из условий не выполнено.
Функция принимает `2N+1` параметров.
**Возвращаемые значения**
Функция возвращает одно из значений `then_N` или `else` , в зависимости от условий `cond_N` .
**Пример**
Рассмотрим таблицу
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─x─┬────y─┐
│ 1 │ ᴺᵁᴸᴸ │
│ 2 │ 3 │
└───┴──────┘
```
Выполним запрос `SELECT multiIf(isNull(y), x, y < 3, y, NULL) FROM t_null` . Результат:
2019-09-23 15:31:46 +00:00
```text
2018-07-26 14:41:59 +00:00
┌─multiIf(isNull(y), x, less(y, 3), y, NULL)─┐
│ 1 │
│ ᴺᵁᴸᴸ │
└────────────────────────────────────────────┘
```
2018-10-16 10:47:17 +00:00
2020-01-30 10:34:55 +00:00
[Оригинальная статья ](https://clickhouse.tech/docs/ru/query_language/functions/conditional_functions/ ) <!--hide-->