すべてのプロダクト
Search
ドキュメントセンター

Time Series Database:クエリでのパーセンテージの計算

最終更新日:Mar 29, 2026

InfluxQL は SELECT 文で基本的な算術演算子をサポートしているため、フィールド値から直接パーセンテージを計算できます。

基本的な算術演算子

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

集計関数を使用したパーセンテージの計算

クエリを作成する前に、以下の要件にご注意ください:

  1. すべてのフィールドで集計関数を使用する必要があります。集計フィールドと非集計フィールドを同じクエリに混在させることはできません。

  2. 各集計関数には、データポイントをグループ化するための時間間隔を定義する GROUP BY time() 句が必要です。

  3. WHERE 句で時間範囲を指定してください。指定しない場合、集計関数が大量の計算リソースを消費する可能性があります。

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 のサンプルデータを使用します。

サンプルデータの設定

  1. サンプルデータをダウンロードします

  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() を使用して、集計のみという要件を満たしています。GROUP BY time(1h) 句はデータを 1 時間のブロックにグループ化し、WHERE 句の時間範囲はスキャンを特定のウィンドウに制限します。