the object 'A' consists of a custom field 'Quantity' ,the average should be calculated for the 'Quantity' fields of all the records, that average should be updated in another Object's field which is not related to Object 'A'. Is this requirement possible?
Hi Sangeeth, Yes, you can use aggregate function avg() for that like:- AggregateResult result= [select avg(Quantity) avgq from Object A]; Double avgquantity = result.get('avgq '); then finally you can use update dml operation for storing that value to another object's field. If it really helped you please select this as best answere. Thanks & Regards, Deepak
Hi Sangeeth, it should work for batch apex too if you have some trouble then please share a piece of code where you get stuck and in the above code please make slight change AggregateResult result= [select avg(AnnualRevenue) avgq from Account]; Double avgquantity = Double.valueOf(result.get('avgq'));
If it solved your problem please mark the answere as solved or please select it as best if you could. :) Thanks & Regards, Deepak
@Deepak Kumar Sharma
This is the Apex class
public class ProductMaintananceHelper {
public Decimal avg;
public void Quantity(){
AggregateResult[] result= [select ProductESB__c ,avg(Quantity__c)aver from Order_Product__c group by ProductESB__c];
for( AggregateResult ar : result){
avg=(Decimal)ar.get('aver');
System.debug('avg is '+avg);
}
}
}
And this is the batch class. The problem is it calculates average for the entire Order_Product__c and updates the field, I want to calculate average for every product separately
global class BatchapextoUpdateQuantity implements Database.Batchable<SObject>,Schedulable {
global Decimal avg;
global Database.querylocator start(Database.Batchablecontext bc){
string query='select id from Product_maintanance__c';
return database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC, list<Product_maintanance__c>prolst){
ProductMaintananceHelper pmh=new ProductMaintananceHelper();
pmh.Quantity();
list<Product_maintanance__c> pmlst= new list<Product_maintanance__c>() ;
for(Product_maintanance__c pmc : prolst){
pmc.Quantity_del__c= pmh.avg;
pmlst.add(pmc);
}
if(pmlst.size()>0){
try{
update pmlst;
}
catch(Exception e){
System.debug('Exception is '+e.getMessage());
}
}
}
global void finish(Database.Batchablecontext bc){
}
global void execute(SchedulableContext sc) {
BatchapextoUpdateQuantity ba=new BatchapextoUpdateQuantity();
Database.executeBatch(ba);
//tring sch = '0 00 00 * * ?';
//ystem.schedule ('Batch', sch, new BatchapextoUpdateQuantity());
}
}
Yes, you can use aggregate function avg() for that like:-
AggregateResult result= [select avg(Quantity) avgq from Object A];
Double avgquantity = result.get('avgq ');
then finally you can use update dml operation for storing that value to another object's field.
If it really helped you please select this as best answere.
Thanks & Regards,
Deepak
it should work for batch apex too if you have some trouble then please share a piece of code where you get stuck and in the above code please make slight change
AggregateResult result= [select avg(AnnualRevenue) avgq from Account];
Double avgquantity = Double.valueOf(result.get('avgq'));
If it solved your problem please mark the answere as solved or please select it as best if you could. :)
Thanks & Regards,
Deepak