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

field_expression  BINARY_OPERATORS field_expression

算術演算子

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

演算子名前説明
*アスタリスク乗算
/スラッシュ

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"数学式は複合フィールドとして使用されます。

SELECT sum(field_name1) / count(field_name2) FROM transactions WHERE application = "yourApp"

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

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

SELECT avg(field1 + field2) FROM event_type WHERE ...

SELECT series(field1 + field2, 1)  FROM event_type WHERE ...

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

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

SELECT * FROM transactions 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 Price FROM 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 などのステートメントを使用してください。