数学式

数学式は、算術演算子を使用するフィールド式です。これらの式は、SELECT 句と WHERE 句の両方の ADQL クエリで使用できます。

field_expression BINARY_OPERATORS field_expression

算術演算子

数学演算子は、整数および浮動小数データフィールド、定数(たとえば、3.14)、および 1 つの整数または浮動小数値を返す関数に対して有効です。ただし、%(モジュロ)は例外です。演算子 *, / and % は、+- よりも優先されます。丸カッコを使用すると、演算の順序を制御できます。単項マイナス(-))もサポートされています。

オペレーターName説明
*アスタリスク乗算
/スラッシュ

2 つの整数型の除算(整数除算として実行されます)。ゼロによる整数除算では NULL が返されます。

%モジュロ2 つの整数の除算後の余りを計算します。整数に対してのみ有効です。
+プラス加算。数値リテラルの前にスペースが必要です。
-マイナス減算。数値リテラルの前にスペースが必要です。unary_operator としても使用できます。

数学式の使用法

数学式は、いくつかの方法で使用できます。

クエリ結果
SELECT regionId % 4, count (*) FROM transactions WHERE application = "yourApp"数学式は、クエリによる暗黙的なグループで GROUP BY 句として使用されます。
SELECT field_name1, (field_name2 + field_name3) * 3.14 FROM transactions WHERE application = "yourApp"数学式は複合フィールドとして使用されます。

sum count SELECT FROM transactions WHERE application = "yourApp"

sum count SELECT filter( WHERE field2 IS NOT NULL) / FROM...

集約関数で使用される数学式。

avg SELECT FROM event_type WHERE...

series SELECT FROM event_type WHERE...

集約関数内で使用される数学式。

SELECT * FROM transactions WHERE ( responseTime * cartValue) > 100

SELECT * FROMt ransactions WHERE (regionId % 3) IN (1, 2)

SELECT * FROM transactions WHERE (responseTime * cartValue) BETWEEN (100, 200)

比較演算子を含む WHERE 句で使用される数学式。

SELECT segments.userData.itemTitle, (segments.userData.itemPrice / 100) AS PriceFROM transactions WHERE application = 'ECommerce 2.0' AND transactionName = '/product_details.xhtml' AND Price > 20

セントの値をドルに変換します。このクエリは、segments.userData.itemPrice をセントからドルに変換し、価格が $20 よりも大きい結果を示します。

SELECT transactionName, (responseTime / 1000) AS responseSeconds, userExperience, requestGUID FROM transactions WHERE application = "ECommerce 2.0" AND responseSeconds > 5

平均応答時間などの値をミリ秒単位ではなく秒単位に変換し、X 秒を超える各トランザクションを表示します。

使用方法に関する特記事項

式のいずれかのフィールドまたは中間式の結果が NULL の場合、式全体が NULL になります。

WHERE 句内の数学式は、集約ではなく、レコードごとに評価されます。

フィールドとメトリック関数を同じ式で組み合わせることはできません。たとえば、次のタイプのクエリは有効ではありません

SELECT responseTime + sum(cartValue) FROM...

(集約関数とは対照的に)すべてのイベントに対して動作する数学的操作により、クエリのパフォーマンスが低下します。次のようなステートメントは回避してください。

WHERE (responseTime - 200) > 800。代わりに WHERE responseTime > 1000 などのステートメントを使用してください。