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

AggregateResult

クエリに MAX() などの集計関数が含まれる場合、このオブジェクトには、query() で返される結果が含まれます。AggregateResultsObject ですが、Contact など、他の sObject オブジェクトとは異なり、参照のみでクエリ結果にのみ使用されます。

QueryResult オブジェクトには、クエリに一致する sObject レコードの配列である records 項目があります。たとえば、次のクエリは records 項目で Contact レコードの配列を返します。

1SELECT Id, LastName
2FROM Contact
3WHERE FirstName = 'Bob'

SOQL クエリに集計関数が含まれる場合、結果は、Contact など、標準オブジェクトのレコード配列ではなく、集計データのセットになります。そのため、records 項目では、AggregateResult レコードの配列を返します。

集計関数の詳細は、Salesforce SOQL および SOSL リファレンス』の「Aggregate Functions」を参照してください。

項目

AggregateResult オブジェクトには、SELECT リストのアイテムごとに別個の項目が含まれます。Enterprise WSDL の場合、各アイテムの結果を取得するには、WSC クライアントフレームワークを使用するときに AggregateResult オブジェクトに対して getField() をコールします。Partner WSDL の場合、各アイテムの結果を取得するには、sObject オブジェクトに対して getField() をコールします。

Enterprise WSDL で動作する例については、サンプルコード —Javaおよびサンプルコード —C#を参照してください。

サンプルコード —Java

1public void queryAggregateResult() {
2  try {
3    String groupByQuery = "SELECT Account.Name n, " +
4        "MAX(Amount) max, MIN(Amount) min " +
5        "FROM Opportunity GROUP BY Account.Name";
6    QueryResult qr = connection.query(groupByQuery);
7    if (qr.getSize() > 0) {
8      System.out.println("Query returned " + 
9          qr.getRecords().length +  " results."
10      );
11      for (SObject sObj : qr.getRecords()) {
12        AggregateResult result = (AggregateResult) sObj;
13        System.out.println("aggResult.Account.Name: " + 
14            result.getField("n")
15        );
16        System.out.println("aggResult.max: " + 
17            result.getField("max")
18        );
19        System.out.println("aggResult.min: " + 
20            result.getField("min")
21        );
22        System.out.println();
23      }
24    } else {
25      System.out.println("No results found.");
26    }
27    System.out.println("\nQuery successfully executed.");
28  } catch (ConnectionException ce) {
29    ce.printStackTrace();
30  }
31}

サンプルコード —C#

1private void testAggregateResult()
2{
3   try
4   {
5      QueryResult qr = null;
6
7      binding.QueryOptionsValue = new QueryOptions();
8
9      String soqlStr = "SELECT Name, " +
10                       "MAX(Amount), " +
11                       "MIN(Amount) " +
12                       "FROM Opportunity " +
13                       "GROUP BY Name";
14
15      qr = binding.query(soqlStr);
16
17      if (qr.size > 0)
18      {
19
20         for (int i = 0; i < qr.records.Length; i++)
21         {
22
23                sforce.AggregateResult ar = (AggregateResult)qr.records[i];
24
25                foreach (XmlElement e in ar.Any)
26                    Console.WriteLine(
27                        "{0} - {1}", 
28                        e.LocalName, 
29                        e.InnerText
30                    );
31
32         }
33      }
34      else
35      {
36         Console.WriteLine("No records found");
37      }
38      Console.WriteLine("Query successfully executed.");
39   }
40   catch (Exception ex)
41   {
42      Console.WriteLine(
43          "\nFailed to execute query successfully." +
44          "error message was: \n" + 
45          ex.Message
46      );
47
48   }
49}