この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

group-by

1 つ以上の項目を基準にしてデータストリーム内のデータをグループ化します。

構文

ステートメント cogroup および group-by は、代替可能です。明確化のため、ステートメント内のデータストリームが 1 つの場合は group-by、2 つ以上の場合は cogroup を使用します。

cogroup ステートメントでは rollup はサポートされません。

メモ

group-by の構文を次に示します。
1result = group data_stream by rollup(field1, [field2]);
  • rollup — 省略可能。グループ化されたデータの合計を計算する group-by の従属句です。グループ化された結果セットごとに、クエリは、ディメンションについては null 値を含む行、基準については結果の合計を含む行を追加で返します。

    rollup には、group ステートメントのすべての項目を含める必要があります。たとえば、次のクエリは、Type 項目と Lead_Source 項目を積み上げ集計します。

    1q = group q by rollup('Type', 'Lead_Source');
    次のクエリは、Type は積み上げ集計されますが、Lead_Source は積み上げ集計されないため、エラーが発生します。
    1q = group q by rollup('Type'), 'Lead_Source';
    rollup 修飾子では、次の集計関数がサポートされています。
    • Count
    • Sum
    • Average
    • Min
    • Max
    • Unique

    他の集計またはウィンドウ関数で rollup を使用すると、エラーが返されます。

  • data_stream — グループ化されるデータ入力。
  • field — データのグループ化の基準となる項目。

1 つの項目でグループ化

次の例は、取引先所有者項目でグループ化を行い、各取引先所有者の商談の数を表示します。

1q = load "DTCOpps";
2q = group q by 'Account_Owner';
3q = foreach q generate 'Account_Owner' as 'Account_Owner', count() as 'count';
4q = order q by 'count' asc;

1 つの項目を基準にしてグループ化したグラフを示している図。

積み上げ集計でグループ化

次の例は、[フェーズ名] 項目でグループ化を行います。このクエリでは、最初にフェーズ名ごとに総合計が表示されます。次に、すべての商談の総合計が積み上げ集計されます。

1q = load "opportunityData";
2q = group q by rollup('StageName');
3q = foreach q generate
4    'StageName' as 'Stage Name',
5    sum('Amount') as 'sum_Amount'
6q = order q by ('Stage Name');

積み上げ集計によって計算されたグループごとの合計値

[合計金額] の合計値に対する [フェーズ名] 列の値は null です。null 値を含めると、他のデータ計算時に混乱の原因になることがあります。212,310,000 がすべてのフェーズの合計を表すことを明確にするために、[すべてのフェーズ] という表示ラベルを追加しましょう。

1q = load "opportunityData";
2q = group q by rollup('StageName');
3q = order q by ('Stage Name');
4q = foreach q generate
5    (case
6        when grouping('StageName') == 1 then "All Stages"
7        else 'StageName'
8    end) as 'Stage Name',
9    sum('Amount') as 'sum_Amount';

特別なラベルを追加するには、case ステートメントと grouping() 関数を使用します。ここでは、grouping() を使用する case ステートメントを追加して、積み上げ集計から返された null 値が [フェーズ名] 列に含まれているかどうかを確認します。含まれている場合は、列に [すべてのフェーズ] という表示ラベルが示されます。含まれていない場合は、フェーズ名が返されます。

積み上げ集計によって計算されたグループごとの合計値

rollup を使用する group-by ステートメントの後に order-by ステートメントを含める場合、列の順序は、group-by ステートメントの場合と同じにする必要があります。各列を同じ順序で記述してください。そうしないと、クエリでエラーが発生します。

メモ