mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-07 16:14:52 +00:00
cd14f9ebcb
* split up select.md * array-join.md basic refactoring * distinct.md basic refactoring * format.md basic refactoring * from.md basic refactoring * group-by.md basic refactoring * having.md basic refactoring * additional index.md refactoring * into-outfile.md basic refactoring * join.md basic refactoring * limit.md basic refactoring * limit-by.md basic refactoring * order-by.md basic refactoring * prewhere.md basic refactoring * adjust operators/index.md links * adjust sample.md links * adjust more links * adjust operatots links * fix some links * adjust aggregate function article titles * basic refactor of remaining select clauses * absolute paths in make_links.sh * run make_links.sh * remove old select.md locations * translate docs/es * translate docs/fr * translate docs/fa * remove old operators.md location * change operators.md links * adjust links in docs/es * adjust links in docs/es * minor texts adjustments * wip * update machine translations to use new links * fix changelog * es build fixes * get rid of some select.md links * temporary adjust ru links * temporary adjust more ru links * improve curly brace handling * adjust ru as well * fa build fix * ru link fixes * zh link fixes * temporary disable part of anchor checks
110 lines
3.9 KiB
Markdown
110 lines
3.9 KiB
Markdown
# Условные функции {#uslovnye-funktsii}
|
||
|
||
## if {#if}
|
||
|
||
Условное выражение. В отличии от большинства систем, ClickHouse всегда считает оба выражения `then` и `else`.
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
SELECT if(cond, then, else)
|
||
```
|
||
|
||
Если условие `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 │
|
||
│ ᴺᵁᴸᴸ │
|
||
└────────────────────────────────────────────┘
|
||
```
|
||
|
||
[Оригинальная статья](https://clickhouse.tech/docs/ru/query_language/functions/conditional_functions/) <!--hide-->
|