小計を識別する GROUPING(fieldName) の使用
SOQL クエリで GROUP BY ROLLUP または GROUP BY CUBE を使用する場合、GROUPING(fieldName) 関数を使用して、行が小計か項目かを判別できます。
GROUP BY ROLLUP または GROUP BY CUBE 句によって小計が追加され、GROUPING(fieldName) 関数で行が項目の小計であるかどうかが識別されます。
データのレポートまたはグラフを作成するためにクエリ結果を反復処理する場合、集計データ行と小計行を区別する必要があります。GROUPING(fieldName) を使用してこれを実行できます。GROUPING(fieldName) の使用は、GROUP BY ROLLUP 句または GROUP BY CUBE 句で複数の項目を使用しているときに、結果を解釈する場合に特に重要です。これは集計データと小計を区別するのに最適な方法です。
GROUPING(fieldName) は、その行が項目の小計の場合は 1、それ以外の場合は 0 を返します。GROUPING(fieldName) は SELECT 句、HAVING 句、および ORDER BY 句で使用できます。
さらに詳しく理解する最も簡単な方法は、クエリとその結果を確認することです。
1SELECT LeadSource, Rating,
2 GROUPING(LeadSource) grpLS, GROUPING(Rating) grpRating,
3 COUNT(Name) cnt
4FROM Lead
5GROUP BY ROLLUP(LeadSource, Rating)このクエリは、LeadSource 項目と Rating 項目の組み合わせの小計を返します。GROUPING(LeadSource) は、行が LeadSource 項目の集計行であるかどうかを示し、GROUPING(Rating) は行が Rating 項目の集計行であるかどうかを示します。
次の表に、クエリ結果を示します。各行の説明をコメント列に示します。
| LeadSource | Rating | grpLS | grpRating | cnt | コメント |
|---|---|---|---|---|---|
| Web | null | 0 | 0 | 5 | LeadSource = Web で Rating なしのリードは 5 件 |
| Web | Hot | 0 | 0 | 1 | LeadSource = Web で Rating = Hot のリードは 1 件 |
| Web | Warm | 0 | 0 | 1 | LeadSource = Web で Rating = Warm のリードは 1 件 |
| Web | null | 0 | 1 | 7 | LeadSource = Web のリードの小計は 7 件 (grpRating = 1 は結果が Rating 項目でグループ化されていることを示す) |
| Phone Inquiry | null | 0 | 0 | 4 | LeadSource = Phone Inquiry で Rating なしのリードは 4 件 |
| Phone Inquiry | null | 0 | 1 | 4 | LeadSource = Phone Inquiry のリードの小計は 4 件 (grpRating = 1 は結果が Rating 項目でグループ化されていることを示す) |
| Partner Referral | null | 0 | 0 | 4 | LeadSource = Partner Referral で Rating なしのリードは 4 件 |
| Partner Referral | null | 0 | 1 | 4 | LeadSource = Partner Referral のリードの小計は 4 件 (grpRating = 1 は結果が Rating 項目でグループ化されていることを示す) |
| Purchased List | null | 0 | 0 | 7 | LeadSource = Purchased List で Rating なしのリードは 7 件 |
| Purchased List | null | 0 | 1 | 7 | LeadSource = Purchased List のリードの小計は 7 件 (grpRating = 1 は結果が Rating 項目でグループ化されていることを示す) |
| null | null | 1 | 1 | 22 | リードの総計は 22 件 (grpRating = 1 と grpLS = 1 はこれが総計であることを示す) |