GROUP BY CUBE
クエリ結果のグループ化項目のすべての組み合わせについて小計を追加するには、SOQL クエリで GROUP BY CUBE 句を使用します。このアクションは、データのクロス表形式レポートを作成するときに役立ちます。たとえば、クロス表クエリを作成して、合計、平均、または別の集計関数の計算を行ってから、2 つの値セット (横方向と縦方向) で結果をグループ化できます。
API バージョン 18.0 以降では、GROUP BY CUBE を SUM() や COUNT(fieldName) などの 集計関数と共に使用できます。
構文は次のとおりです。
1[GROUP BY CUBE (fieldName[,...])]GROUP BY CUBE 句を使用するクエリは、GROUP BY 句を使用する同等のクエリと同じ集計データを返します。さらに、カンマ区切りのグルーピングリストで指定された項目の各組み合わせの追加小計行および総計行を返します。GROUP BY CUBE 句には、3 つの項目まで含めることができます。
次のクエリは、Type と BillingCountry の各組み合わせでの取引先の小計を返します。
1SELECT Type, BillingCountry,
2 GROUPING(Type) grpType, GROUPING(BillingCountry) grpCty,
3 COUNT(id) accts
4FROM Account
5GROUP BY CUBE(Type, BillingCountry)
6ORDER BY GROUPING(Type), GROUPING(BillingCountry)次の表に、クエリ結果を示します。このクエリは、集計データ行の後に小計行と総計行が返されるように ORDER BY GROUPING(Type), GROUPING(BillingCountry) を使用しています。これは必須ではありませんが、コードのクエリ結果を反復処理するときに役立ちます。各行の説明をコメント列に示します。
| Type | BillingCountry | grpType | grpCty | accts | コメント |
|---|---|---|---|---|---|
| Customer - Direct | null | 0 | 0 | 6 | Type = Customer - Direct で BillingCountry = null の取引先は 6 件 |
| Customer - Channel | USA | 0 | 0 | 1 | Type = Customer - Channel で BillingCountry = USA の取引先は 1 件 |
| Customer - Channel | null | 0 | 0 | 2 | Type = Customer - Channel で BillingCountry = null の取引先は 2 件 |
| Customer - Direct | USA | 0 | 0 | 1 | Type = Customer - Direct で BillingCountry = USA の取引先は 1 件 |
| Customer - Channel | France | 0 | 0 | 1 | Type = Customer - Channel で BillingCountry = France の取引先は 1 件 |
| null | USA | 0 | 0 | 1 | Type = null で BillingCountry = USA の取引先は 1 件 |
| Customer - Channel | null | 0 | 1 | 4 | Type = Customer - Channel の取引先の小計は 4 件 (grpCty = 1 は結果が BillingCountry 項目でグループ化されていることを示す) |
| Customer - Direct | null | 0 | 1 | 7 | Type = Customer - Direct の取引先の小計は 7 件 (grpCty = 1 は結果が BillingCountry 項目でグループ化されていることを示す) |
| null | null | 0 | 1 | 1 | Type = null の取引先の小計は 1 件 (grpCty = 1 は結果が BillingCountry 項目でグループ化されていることを示す) |
| null | France | 1 | 0 | 1 | BillingCountry = France の取引先の小計は 1 件 (grpType = 1 は結果が Type 項目でグループ化されていることを示す) |
| null | USA | 1 | 0 | 3 | BillingCountry = USA の取引先の小計は 3 件 (grpType = 1 は結果が Type 項目でグループ化されていることを示す) |
| null | null | 1 | 0 | 8 | BillingCountry = null の取引先の小計は 8 件 (grpType = 1 は結果が Type 項目でグループ化されていることを示す) |
| null | null | 1 | 1 | 12 | 取引先の総計は 12 件 (grpType = 1 と grpCty = 1 はこれが総計であることを示す) |
これらのクエリ結果を使用して、結果のクロス表形式レポートを表示できます。
| Type/BillingCountry | USA | France | null | 合計 |
|---|---|---|---|---|
| Customer - Direct | 1 | 0 | 6 | 7 |
| Customer - Channel | 1 | 1 | 2 | 4 |
| null | 1 | 0 | 0 | 1 |
| 合計 | 3 | 1 | 8 | 12 |