Development questions

Write a trigger that calculates the average Rating_Score__c from Feedback__c child records and updates the parent Product2 record using AggregateResult.

DevelopmentMediumCognizantInfosysPwC

Trigger on Feedback__c (after insert, update, delete, undelete), then recompute AVG(Rating_Score__c) per Product2 with AggregateResult.

apex
trigger FeedbackTrigger on Feedback__c (after insert, after update, after delete, after undelete) {
    Set<Id> prodIds = new Set<Id>();
    for (Feedback__c f : (Trigger.isDelete ? Trigger.old : Trigger.new)) if (f.Product__c != null) prodIds.add(f.Product__c);
    if (Trigger.isUpdate) for (Feedback__c f : Trigger.old) if (f.Product__c != null) prodIds.add(f.Product__c);
    Map<Id, Product2> prods = new Map<Id, Product2>();
    for (Id id : prodIds) prods.put(id, new Product2(Id = id, Average_Rating__c = 0));
    for (AggregateResult ar : [SELECT Product__c p, AVG(Rating_Score__c) a FROM Feedback__c
                               WHERE Product__c IN :prodIds GROUP BY Product__c]) {
        prods.get((Id) ar.get('p')).Average_Rating__c = (Decimal) ar.get('a');
    }
    update prods.values();
}
apex-triggertriggercodingscenariorollupaggregate