概要
条件式の結果をそのまま使用する
0、1、または NULL です。そのため、条件式の結果は次のようにそのまま使用できます。
条件式における NULL 値
Nullable の場合は、クエリを慎重に組み立てる必要があります。
次の例では、multiIf に等価条件を追加していないために失敗することを示しています。
CASE ステートメント
CASE WHEN ... THEN ... ELSE ... END
この形式では高い柔軟性があり、内部的には multiIf 関数を使って実装されています。各条件は個別に評価され、式には定数以外の値を含めることもできます。
CASE <expr> WHEN <val1> THEN ... WHEN <val2> THEN ... ELSE ... END
このより簡潔な形式は、定数値との一致に最適化されており、内部的にはcaseWithExpression()を使用します。
注意点
multiIf などの内部的に等価な処理) の結果の型を、条件を評価する前に決定します。これは、返される式の型が異なる場合、たとえばタイムゾーンや数値型が異なる場合に重要です。
- 結果の型は、すべての分岐の中で互換性のある最も大きい型に基づいて選択されます。
- いったんこの型が選択されると、他のすべての分岐は暗黙的にその型にキャストされます。実行時にそのロジックが決して実行されない場合でも同様です。
- DateTime64 のようにタイムゾーンが型シグネチャの一部である型では、これによって予期しない動作が生じることがあります。ほかの分岐で異なるタイムゾーンを指定していても、最初に見つかったタイムゾーンがすべての分岐に使用される場合があります。
Asia/Kolkata のタイムスタンプを返します
DateTime64(3, <timezone>) 戻り値型を認識します。最初に見つかった DateTime64(3, 'Asia/Kolkata' を共通型として推論し、他の分岐を暗黙的にこの型にキャストします。
これは、意図したタイムゾーンのフォーマットを保持するために、文字列に変換することで対処できます:
clamp
value— 制限する値。 -min— 下限値。 -max— 上限値。
Query
Response
Query
Response
Query
Response
greatest
NULL 引数は無視されます。
- Array の場合、辞書順で最大の配列を返します。
DateTime型の場合、結果の型は最大の型に昇格されます (例:DateTime32と混在している場合はDateTime64) 。
NULL の動作を変更するには、設定 least_greatest_legacy_null_behavior を使用しますバージョン 24.12 では後方互換性のない変更が導入され、NULL 値は無視されるようになりました。以前は、引数のいずれかが NULL の場合に NULL を返していました。
従来の動作を維持するには、設定 least_greatest_legacy_null_behavior (デフォルト: false) を true に設定してください。x1[, x2, ...]— 比較対象の 1 つまたは複数の値。すべての引数は比較可能な型である必要があります。Any
Any
例
数値型
Query
Response
Query
Response
Query
Response
if
- 条件
condが非ゼロの値として評価された場合、この関数は式thenの結果を返します。 condが 0 または NULL として評価された場合は、式elseの結果が返されます。
short_circuit_function_evaluation では、短絡評価を使用するかどうかを制御します。
有効な場合、式 then は cond が true の行でのみ評価され、式 else は cond が false の行でのみ評価されます。
たとえば、短絡評価を使用すると、次のクエリを実行してもゼロ除算の例外はスローされません。
then と else は同様の型である必要があります。
構文
cond— 評価される条件。UInt8、Nullable(UInt8)、またはNULLthen—condが true の場合に返される式。 -else—condが false またはNULLの場合に返される式。
cond に応じて、then または else の式の結果を返します。
例
使用例
Query
Response
least
NULL の引数は無視されます。
- 配列の場合、辞書順で最小の配列を返します。
- DateTime型の場合、結果の型は最大の型に昇格されます (たとえば、DateTime32 と混在している場合は DateTime64) 。
NULL の動作を変更するには、設定 least_greatest_legacy_null_behavior を使用しますバージョン 24.12 では、NULL 値が無視されるようになる後方互換性のない変更が導入されました。以前は、引数のいずれかが NULL の場合、NULL を返していました。
以前の動作を維持するには、設定 least_greatest_legacy_null_behavior (デフォルト: false) を true に設定してください。x1[, x2, ...]— 比較する単一の値または複数の値。すべての引数は、相互に比較可能な型である必要があります。Any
Any
例
数値型
Query
Response
Query
Response
Query
Response
multiIf
CASE 演算子をより簡潔に記述できます。
各条件は順番に評価されます。最初に true (非ゼロかつ NULL ではない) となった条件に対応する分岐値を返します。
いずれの条件も true でない場合は、else の値を返します。
設定 short_circuit_function_evaluation は、
短絡評価を使用するかどうかを制御します。有効な場合、then_i 式は
((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i) が true になる行でのみ評価されます。
たとえば、短絡評価を使用すると、次のクエリを実行してもゼロ除算例外は発生しません。
NULL の場合は false として扱われます。
構文
caseWithoutExpression, caseWithoutExpr
引数
cond_N—then_Nを返すかどうかを制御する、N 番目に評価される条件。UInt8またはNullable(UInt8)またはNULLthen_N—cond_Nが true の場合に返される関数の結果。 -else— どの条件も true でない場合の関数の結果。
cond_N に対応する then_N の結果を返し、どれにも一致しない場合は else の結果を返します。
例
使用例
Query
Response