ADQL には明示的な GROUP BY 句はありません。ただし、クエリに メトリック関数または バケット関数が含まれる場合、SELECT 句にフィールド名を含むクエリは GROUP BY ステートメントとして動作します。
クエリによるグループには、制限により最大で 5 つの用語しか含めることができません。用語として、(暗黙的な GROUP BY を使用する)フィールド、または series
などのバケット関数を使用できます。
集約の例
この例では、クエリにより、集約されていないフィールドである application に基づいて、avg
(responseTime)集約がグループ化されます。したがって、結果には、アプリケーションごとに計算された平均応答時間が含まれます。
SELECT application, avg
(responseTime) FROM transactions
例の結果:
暗黙的なグループ化は、集約フィールドの前に複数の非集約フィールドを使用することで拡張できます。例:
SELECT application, segments.tier, avg
(responseTime) FROM transactions
2 番目の非集約フィールドとして tier を追加することにより、クエリで、非集約フィールドである application と tierName に基づいて avg
(responseTime)集約をグループ化します。複数のグループフィールドがあるため、2 番目の非集約フィールドである tier 名は、application グループの下位のサブグループにしています。したがって、application と tier 名の各組み合わせにより、平均応答時間が計算されるグループが形成されます。
例の結果:
SQL ユーザの場合、次の 2 つのステートメントは、それぞれの環境で同様の結果を生成します。
- ADQL クエリ:SELECT application, segments.tier,
avg
(responseTime) FROM transactions - SQL クエリ:SELECT application, segments.tier,
avg
(responseTime) FROM transactions GROUP BY applicationName, segments.tier
バケット関数の例
series
、range
などのバケット関数は、他の集約を計算できるグループを定義します。バケットは、各関数のパラメータと後続の集約を計算する形式グループによって指定します。
たとえば、次のクエリは、2 分間隔(またはバケット)の平均応答時間を計算します。
SELECT series
(eventTimestamp, '2m'), avg
(responseTime)
例の結果:
集約とバケット関数および暗黙的な GROUP BY を組み合わせることもできます。次のクエリは、6 時間間隔の tier ごとにグループ化された平均応答時間を返します。
SELECT series
(eventTimestamp, '6h'), segments.tier, avg
(responseTime) FROM transactions
例の結果: