要件
Apexの基本ポイント
①Countなどの集合変数
List<AggregateResult>
AggregateResult.get('fieldName expr0,1,2')
②Mapの使用方法
Map<id,Account> accounts = new Map<id,Account>( [Select Id, Name from Account Where Id IN :recordIds])
map.keysets().map.values(), map.get(key)
public class AccountProcessor{
@future
public static void countContacts(List<Id> recordIds) {
Map<id,Account> accounts = new Map<id,Account>( [Select Id, Name from Account Where Id IN :recordIds]);
List<AggregateResult> arr = [select accountid,count(id)
from contact Where accountid IN :recordIds group by accountid ];
For (AggregateResult ar : arr){
System.debug( ar.get('AccountId') + '---' + ar.get('expr0'));
String accId = ar.get('AccountId').toString();
accounts.get(accId).Number_Of_Contacts__c = (Decimal)ar.get('expr0');
}
update(accounts.values());
}
}
Countだけをとるとき
List<AggregateResult> arr = [Select count(id) CNT from account];
System.debug(arr.get(0).get('CNT'));
Or
AggregateResult arr0 = [Select count(id) CNT from account];
System.debug('Count:' + arr0.get('CNT'));