メインコンテンツまでスキップ
メインコンテンツまでスキップ

条件関数

if

条件分岐を実行します。

条件 cond がゼロ以外の値を評価すると、関数は then の式の結果を返します。もし cond がゼロまたは NULL を評価すると、else の式の結果が返されます。

設定 short_circuit_function_evaluation により、ショートサーキット評価が使用されるかどうかが制御されます。有効にされた場合、condtrue の行のみで then の式が評価され、condfalse の行で else の式が評価されます。例えば、ショートサーキット評価を使うと、クエリ SELECT if(number = 0, 0, intDiv(42, number)) FROM numbers(10) を実行したときに、ゼロ除算の例外がスローされることはありません。

thenelse は同様の型でなければなりません。

構文

エイリアス: cond ? then : else(三項演算子)

引数

  • cond – 評価される条件。UInt8, Nullable(UInt8) または NULL。
  • thencondition が true の場合に返される式。
  • elsecondition が 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_Nthen_N が返されるかを制御する N 番目の評価された条件。
  • then_Ncond_N が true のときの関数の結果。
  • else — どの条件も true でない場合の関数の結果。

返される値

条件 cond_N に応じて、いずれかの then_N または else の式の結果。

以下のテーブルを考えます:

条件結果を直接使用する

条件式は常に 01、または 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 – 上限を制限します。

返される値

値が最小値未満の場合、最小値を返し、最大値を超える場合は最大値を返し、それ以外の場合は現在の値を返します。

例: