InfluxQL では、単純な数式を解くことができます。これにより、メジャーメントの 2 つのフィールドに基づいてパーセンテージを簡単に計算できます。割合を計算する前に、次の注意事項をお読みください。
クエリでの基本的な計算
SELECT
ステートメントでは、+
、-
、/
、*
、()
などの基本的な算術演算子を使用できます。
-- 2 つのフィールドキーを追加します
SELECT field_key1 + field_key2 AS "field_key_sum" FROM "measurement_name" WHERE time < now() - 15m
-- あるフィールドキーから別のフィールドキーを減算します
SELECT field_key1 - field_key2 AS "field_key_difference" FROM "measurement_name" WHERE time < now() - 15m
-- 計算のためにフィールドキーをグループ化し、計算結果を連結します
SELECT (field_key1 + field_key2) - (field_key3 + field_key4) AS "some_calculation" FROM "measurement_name" WHERE time < now() - 15m
クエリでの割合の計算
あるフィールド値を別のフィールド値で除算し、その結果に 100 を乗算することで、割合を計算できます。
SELECT (field_key1 / field_key2) * 100 AS "calculated_percentage" FROM "measurement_name" WHERE time < now() - 15m
集計関数を使用した割合の計算
集計関数を使用して割合を計算する場合、クエリ内のすべてのデータを集計関数を使用して参照する必要があります。集計データと非集計データを混在させることはできません。
すべての集計関数には、ポイントをグループ化および集計する時間間隔を定義する GROUP BY time()
句を含める必要があります。
SELECT (sum(field_key1) / sum(field_key2)) * 100 AS "calculated_percentage" FROM "measurement_name" WHERE time < now() - 15m GROUP BY time(1m)
例
サンプルデータ
次の例では、1 日を通してさまざまな種類のリンゴが入ったバスケットの重量を追跡する、シミュレートされた Apple Stand データを使用します。
2. サンプルデータをインポートします。
influx -ssl -username <Username> -password <Password> -host <Domain name> -port 3242 -import -path=path/to/apple_stand.txt -database=apple_stand
リンゴの種類ごとの総重量に対する割合を計算する
次のクエリは、指定された各時点において、各リンゴの種類が占める総重量に対する割合を計算します。
SELECT
("braeburn"/total_weight)*100,
("granny_smith"/total_weight)*100,
("golden_delicious"/total_weight)*100,
("fuji"/total_weight)*100,
("gala"/total_weight)*100
FROM "apple_stand"."autogen"."variety"
リンゴの種類ごとの集計割合を計算する
次のクエリは、1 時間ごとのすべてのリンゴの平均重量における、各リンゴの種類の平均重量の割合を計算します。
SELECT
(mean("braeburn")/mean(total_weight))*100,
(mean("granny_smith")/mean(total_weight))*100,
(mean("golden_delicious")/mean(total_weight))*100,
(mean("fuji")/mean(total_weight))*100,
(mean("gala")/mean(total_weight))*100
FROM "apple_stand"."autogen"."variety"
WHERE time >= '2018-06-18T12:00:00Z' AND time <= '2018-06-19T04:35:00Z'
GROUP BY time(1h)
クエリに関する次の項目に注意してください。
このクエリは、すべてのデータを抽出するために集計関数 (
mean()
) を使用します。このクエリには、データを 1 時間ブロックに集計する
GROUP BY time()
句が含まれています。このクエリは、指定された期間に基づいて実行されます。この期間が指定されていない場合、集計関数は大量の計算リソースを消費する可能性があります。