+ Start a Discussion

Apex Error "System.UnexpectedException: Field must be grouped or aggregated"

Could someone please help me with this error that is driving me crazy. I have Apex code that is schedule to run once a day, but errors due to my soql query with this message:


"caused by: System.UnexpectedException: Field must be grouped or aggregated: pkl_Year__c"


The code is:



global class ProgramSnapshot implements Database.Batchable<sObject>{
    String query = 'Select SUM(num_3rdParty_Volume__c) num_sum3rd, SUM(num_Customer_Volume__c) num_sumCust, SUM(num_Our_Volume__c) num_sumOur, pkl_year__c FROM Program_Volume__c GROUP BY pkl_year__c LIMIT 100';    
    global database.querylocator start(Database.BatchableContext BC){
        return Database.getQueryLocator(query);
    global void execute(Database.BatchableContext BC, List<sObject> scope){
        List<zzTest_DW__c> test_DWs = new List<zzTest_DW__c>();
        for(SObject s : scope){
            zzTest_DW__c a = new zzTest_DW__c();
            a.num_3rdParty_Volume__c = Integer.valueOf(String.valueOf(s.get('num_sum3rd')));
            a.num_Customer_Volume__c = Integer.valueOf(String.valueOf(s.get('num_sumCust')));
            a.num_Our_Volume__c = Integer.valueOf(String.valueOf(s.get('num_sumOur')));
            a.txt_GroupName__c = 'Test Group';
            a.txt_Model__c = 'Test Model';
            a.txt_ModelCode__c = 'Test Model Code';
            a.txt_Platform__c = 'Test Platform';
            a.txt_Program_Name__c = 'Test Program Name';
            a.txt_Year__c = String.valueOf(s.get('pkl_year__c'));
            a.date_Snapshot__c = Date.Today();
        insert test_DWs;
    global void finish(Database.BatchableContext BC){



If I try to aggregate the pkl_year__c field, by doing a MAX(pkl_year__c), then I get an error of:


"System.QueryException: Grouped field should not be aggregated: pkl_Year__c"


What am I doing wrong??

Ankit AroraAnkit Arora

I don't see any problem with your code. I also tried the same thing on my org see below :


For e.g. If I write this then it will give me error : "Field must be grouped or aggregated: Id"



List<AggregateResult> ag = [select Id , name from Account GROUP BY Name] ;
System.debug(ag + ' ::::::::::::::') ;


Now if I write this :



List<AggregateResult> ag = [select COUNT(Id) , name from Account GROUP BY Name] ;
System.debug(ag + ' ::::::::::::::') ;


It resolves the error. Hope this may help you.



Ankit Arora

Blog | Facebook | Blog Page




I am having query


select count(Id),AccountId from case where Case.IsClosed = false GROUP BY AccountId


but the Batchable class is throwing error:


04:11:54.319 (319016000)|FATAL_ERROR|System.UnexpectedException: Field must be grouped or aggregated: AccountId