2020-04-15 13:56:49 +00:00
---
machine_translated: true
2020-05-15 04:34:54 +00:00
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
2020-04-15 13:56:49 +00:00
toc_priority: 43
toc_title: "Ko\u015Fullu "
---
2020-04-30 18:19:18 +00:00
# Koşullu Fonksiyonlar {#conditional-functions}
2020-04-15 13:56:49 +00:00
## eğer {#if}
Koşullu dallanmayı kontrol eder. Çoğu sistemin aksine, ClickHouse her zaman her iki ifadeyi de değerlendirir `then` ve `else` .
**Sözdizimi**
``` sql
SELECT if(cond, then, else)
```
2020-05-15 04:34:54 +00:00
Eğer durum `cond` sı fı r olmayan bir değere değerlendirir, ifadenin sonucunu döndürür `then` ve ifad andenin sonucu `else` varsa, atlanı r. Eğer... `cond` sı fı r veya `NULL` fakat daha sonra sonucu `then` ifade atlanı r ve sonucu `else` Ifade, varsa, döndürülür.
2020-04-15 13:56:49 +00:00
**Parametre**
- `cond` – The condition for evaluation that can be zero or not. The type is UInt8, Nullable(UInt8) or NULL.
- `then` - Koşul karşı lanı rsa dönmek için ifade.
- `else` - Koşul karşı lanmazsa dönmek için ifade.
**Döndürülen değerler**
İşlev yürütür `then` ve `else` ifadeler ve koşulun olup olmadı ğı na bağlı olarak sonucunu döndürür `cond` sı fı r ya da değil.
**Örnek**
Sorgu:
``` sql
SELECT if(1, plus(2, 2), plus(2, 6))
```
Sonuç:
``` text
┌─plus(2, 2)─┐
│ 4 │
└────────────┘
```
Sorgu:
``` sql
SELECT if(0, plus(2, 2), plus(2, 6))
```
Sonuç:
``` text
┌─plus(2, 6)─┐
│ 8 │
└────────────┘
```
- `then` ve `else` en düşük ortak türe sahip olmalı dı r.
**Örnek:**
Bunu al `LEFT_RIGHT` Tablo:
``` sql
SELECT *
FROM LEFT_RIGHT
┌─left─┬─right─┐
│ ᴺᵁᴸᴸ │ 4 │
│ 1 │ 3 │
│ 2 │ 2 │
│ 3 │ 1 │
│ 4 │ ᴺᵁᴸᴸ │
└──────┴───────┘
```
Aşağı daki sorgu karşı laştı rı r `left` ve `right` değerler:
``` sql
SELECT
left,
right,
if(left < right , ' left is smaller than right ' , ' right is greater or equal than left ' ) AS is_smaller
FROM LEFT_RIGHT
WHERE isNotNull(left) AND isNotNull(right)
┌─left─┬─right─┬─is_smaller──────────────────────────┐
│ 1 │ 3 │ left is smaller than right │
│ 2 │ 2 │ right is greater or equal than left │
│ 3 │ 1 │ right is greater or equal than left │
└──────┴───────┴─────────────────────────────────────┘
```
Not: `NULL` bu örnekte değerler kullanı lmaz, kontrol edin [Koşullardaki boş değerler ](#null-values-in-conditionals ) bölme.
## Üçlü Operatör {#ternary-operator}
2020-05-15 04:34:54 +00:00
Aynı gibi çalı şı yor. `if` İşlev.
2020-04-15 13:56:49 +00:00
Sözdizimi: `cond ? then : else`
2020-05-15 04:34:54 +00:00
Dönüşler `then` eğer... `cond` true (sı fı rdan büyük) olarak değerlendirir, aksi takdirde döndürür `else` .
2020-04-15 13:56:49 +00:00
- `cond` türü olmalı dı r `UInt8` , ve `then` ve `else` en düşük ortak türe sahip olmalı dı r.
- `then` ve `else` olabilir `NULL`
**Ayrı ca bakı nı z**
2020-04-30 18:19:18 +00:00
- [ifNotFinite ](other-functions.md#ifnotfinite ).
2020-04-15 13:56:49 +00:00
## multiİf {#multiif}
2020-05-15 04:34:54 +00:00
Yaz allowsmanı zı sağlar [CASE ](../operators/index.md#operator_case ) operatör sorguda daha kompakt.
2020-04-15 13:56:49 +00:00
Sözdizimi: `multiIf(cond_1, then_1, cond_2, then_2, ..., else)`
**Parametre:**
- `cond_N` — The condition for the function to return `then_N` .
- `then_N` — The result of the function when executed.
- `else` — The result of the function if none of the conditions is met.
İşlev kabul eder `2N+1` parametre.
**Döndürülen değerler**
İşlev, değerlerden birini döndürür `then_N` veya `else` bu koşullara bağlı olarak `cond_N` .
**Örnek**
Yine kullanarak `LEFT_RIGHT` Tablo.
``` sql
SELECT
left,
right,
multiIf(left < right , ' left is smaller ' , left > right, 'left is greater', left = right, 'Both equal', 'Null value') AS result
FROM LEFT_RIGHT
┌─left─┬─right─┬─result──────────┐
│ ᴺᵁᴸᴸ │ 4 │ Null value │
│ 1 │ 3 │ left is smaller │
│ 2 │ 2 │ Both equal │
│ 3 │ 1 │ left is greater │
│ 4 │ ᴺᵁᴸᴸ │ Null value │
└──────┴───────┴─────────────────┘
```
2020-05-15 04:34:54 +00:00
## Koşullu Sonuçları Doğrudan Kullanma {#using-conditional-results-directly}
2020-04-15 13:56:49 +00:00
Koşullar her zaman sonuç `0` , `1` veya `NULL` . Böylece koşullu sonuçları doğrudan bu şekilde kullanabilirsiniz:
``` sql
SELECT left < right AS is_small
FROM LEFT_RIGHT
┌─is_small─┐
│ ᴺᵁᴸᴸ │
│ 1 │
│ 0 │
│ 0 │
│ ᴺᵁᴸᴸ │
└──────────┘
```
## Koşullardaki boş değerler {#null-values-in-conditionals}
Ne zaman `NULL` değerler koşullarla ilgilidir, sonuç da olacaktı r `NULL` .
``` sql
SELECT
NULL < 1 ,
2 < NULL ,
NULL < NULL ,
NULL = NULL
┌─less(NULL, 1)─┬─less(2, NULL)─┬─less(NULL, NULL)─┬─equals(NULL, NULL)─┐
│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │
└───────────────┴───────────────┴──────────────────┴────────────────────┘
```
Bu nedenle, sorguları nı zı türleri dikkatli bir şekilde oluşturmalı sı nı z `Nullable` .
Aşağı daki örnek, eşittir koşulu eklemek başarı sı z tarafı ndan bu gösterir `multiIf` .
``` sql
SELECT
left,
right,
multiIf(left < right , ' left is smaller ' , left > right, 'right is smaller', 'Both equal') AS faulty_result
FROM LEFT_RIGHT
┌─left─┬─right─┬─faulty_result────┐
│ ᴺᵁᴸᴸ │ 4 │ Both equal │
│ 1 │ 3 │ left is smaller │
│ 2 │ 2 │ Both equal │
│ 3 │ 1 │ right is smaller │
│ 4 │ ᴺᵁᴸᴸ │ Both equal │
└──────┴───────┴──────────────────┘
```
[Orijinal makale ](https://clickhouse.tech/docs/en/query_language/functions/conditional_functions/ ) <!--hide-->