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

バケット関数の例

seriesrange などのバケット関数は、他の集約を計算できるグループを定義します。バケットは、各関数のパラメータと後続の集約を計算する形式グループによって指定します。

たとえば、次のクエリは、2 分間隔(またはバケット)の平均応答時間を計算します。

SELECT series(eventTimestamp, '2m'), avg(responseTime)

例の結果:

集約とバケット関数および暗黙的な GROUP BY を組み合わせることもできます。次のクエリは、6 時間間隔の tier ごとにグループ化された平均応答時間を返します。

SELECT series(eventTimestamp, '6h'), segments.tier, avg(responseTime) FROM transactions

例の結果: