GROUP BY を使用するときの考慮事項
GROUP BY 句を使用する SOQL クエリを作成する場合、注意が必要な考慮事項がいくつかあります。
- 一部のオブジェクト項目には、グループ化がサポートされないデータ型があります。GROUP BY 句には、これらのデータ型を使用する項目を含めることができません。DescribeSObjectResult に関連付けられた Field オブジェクトには、GROUP BY 句に項目を含めることができるかどうかを定義する Field 項目があります。
- クエリで LIMIT 句と集計関数を使用する場合は、GROUP BY 句を使用する必要があります。たとえば、次のクエリは有効です。
1SELECT Name, Max(CreatedDate) 2FROM Account 3GROUP BY Name 4LIMIT 5次のクエリは、GROUP BY 句がないので無効です。
1SELECT MAX(CreatedDate) 2FROM Account LIMIT 1 - GROUP BY 句を使用するクエリでは、__r 構文を使用する子リレーションの式は使用できません。詳細は、「リレーション名、カスタムオブジェクトおよびカスタム項目について」を参照してください。
GROUP BY および queryMore()
GROUP BY 句を含まないクエリの場合、クエリ結果のオブジェクトには、デフォルトで最大 500 行のデータが含まれます。クエリ結果が 500 行を超える場合は、クライアントアプリケーションで queryMore() コールとサーバ側のカーソルを使用して、追加の行を 500 行のチャンクで取得できます。
ただし、クエリに GROUP BY 句が含まれている場合は、queryMore() を使用できません。QueryOptions ヘッダーのデフォルトサイズを最大 2,000 行に増やすことができます。クエリ結果が 2,000 行を超える場合、より小さなチャンクでデータを照会するように検索条件を変更する必要があります。要求されるバッチサイズが、実際のバッチサイズになるとは限りません。パフォーマンスを最大化するために変更が行われます。詳細は「クエリのバッチサイズの変更」を参照してください。
GROUP BY と小計
クエリで小計の計算を行い、コードのロジックを維持しないで済むようにするには、「GROUP BY ROLLUP」を参照してください。グループ化された項目のすべての可能な組み合わせを対象に小計を計算するには (たとえば、クロス集計レポートを作成するため)、代わりに「GROUP BY CUBE」を参照してください。