diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c
index 914b02ceee..6ef222ad96 100644
--- a/src/backend/executor/nodeAgg.c
+++ b/src/backend/executor/nodeAgg.c
@@ -1578,12 +1578,16 @@ find_hash_columns(AggState *aggstate)
 	aggstate->max_colno_needed = 0;
 	aggstate->all_cols_needed = true;
 
-	for (int i = 0; i < scanDesc->natts; i++)
+	for (int i = scanDesc->natts-1;
+		 i >= 0 && (aggstate->all_cols_needed || aggstate->max_colno_needed == 0);
+		 i--)
 	{
-		int			colno = i + 1;
-
+		int colno = i + 1;
 		if (bms_is_member(colno, aggstate->colnos_needed))
-			aggstate->max_colno_needed = colno;
+		{
+			if (aggstate->max_colno_needed == 0)
+				aggstate->max_colno_needed = colno;
+		}
 		else
 			aggstate->all_cols_needed = false;
 	}
