条件関数
if
条件分岐を実行します。
条件 cond
がゼロ以外の値を評価すると、関数は then
の式の結果を返します。もし cond
がゼロまたは NULL
を評価すると、else
の式の結果が返されます。
設定 short_circuit_function_evaluation により、ショートサーキット評価が使用されるかどうかが制御されます。有効にされた場合、cond
が true
の行のみで then
の式が評価され、cond
が false
の行で else
の式が評価されます。例えば、ショートサーキット評価を使うと、クエリ SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10)
を実行したときに、ゼロ除算の例外がスローされることはありません。
then
と else
は同様の型でなければなりません。
構文
エイリアス: cond ? then : else
(三項演算子)
引数
cond
– 評価される条件。UInt8, Nullable(UInt8) または NULL。then
–condition
が true の場合に返される式。else
–condition
が false または NULL の場合に返される式。
返される値
条件 cond
に応じて、then
または else
の式の結果。
例
結果:
multiIf
クエリ内で CASE 演算子をよりコンパクトに記述できるようにします。
構文
設定 short_circuit_function_evaluation により、ショートサーキット評価が使用されるかどうかが制御されます。有効にされた場合、then_i
の式は ((NOT cond_1) AND (NOT cond_2) AND ... AND (NOT cond_{i-1}) AND cond_i)
が true
の行でのみ評価され、cond_i
は ((NOT cond_1) AND (NOT cond_2) AND ... AND (NOT cond_{i-1}))
が true
の行でのみ評価されます。例えば、ショートサーキット評価を用いると、クエリ SELECT multiIf(number = 2, intDiv(1, number), number = 5) FROM numbers(10)
を実行したときにゼロ除算の例外が発生しません。
引数
この関数は 2N+1
のパラメーターを受け入れます:
cond_N
—then_N
が返されるかを制御する N 番目の評価された条件。then_N
—cond_N
が true のときの関数の結果。else
— どの条件も true でない場合の関数の結果。
返される値
条件 cond_N
に応じて、いずれかの then_N
または else
の式の結果。
例
以下のテーブルを考えます:
条件結果を直接使用する
条件式は常に 0
、1
、または NULL
になります。したがって、条件結果を次のように直接使用することができます:
条件における NULL 値
条件に NULL 値が含まれると、結果も NULL になります。
したがって、型が Nullable
の場合は、クエリを慎重に構築する必要があります。
以下の例は、multiIf
に等しい条件を追加できずに失敗することを示しています。
greatest
値のリストの中で最大の値を返します。リストのすべてのメンバーは比較可能な型でなければなりません。
例:
返される型は Float64 です。UInt8 は比較のために 64 ビットに昇格する必要があります。
返される型は DateTime64 です。DateTime32 は比較のために 64 ビットに昇格する必要があります。
least
値のリストの中で最小の値を返します。リストのすべてのメンバーは比較可能な型でなければなりません。
例:
返される型は Float64 です。UInt8 は比較のために 64 ビットに昇格する必要があります。
返される型は DateTime64 です。DateTime32 は比較のために 64 ビットに昇格する必要があります。
clamp
戻り値を A と B の間に制約します。
構文
引数
value
– 入力値。min
– 下限を制限します。max
– 上限を制限します。
返される値
値が最小値未満の場合、最小値を返し、最大値を超える場合は最大値を返し、それ以外の場合は現在の値を返します。
例: