AggregateResult
クエリに MAX() などの集計関数が含まれる場合、このオブジェクトには、query() で返される結果が含まれます。AggregateResult は sObject ですが、Contact など、他の sObject オブジェクトとは異なり、参照のみでクエリ結果にのみ使用されます。
QueryResult オブジェクトには、クエリに一致する sObject レコードの配列である records 項目があります。たとえば、次のクエリは records 項目で Contact レコードの配列を返します。
1SELECT Id, LastName
2FROM Contact
3WHERE FirstName = 'Bob'SOQL クエリに集計関数が含まれる場合、結果は、Contact など、標準オブジェクトのレコード配列ではなく、集計データのセットになります。そのため、records 項目では、AggregateResult レコードの配列を返します。
集計関数の詳細は、『Salesforce SOQL および SOSL リファレンス』の「集計関数」を参照してください。
項目
各 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}