diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 6ea46c46812d9f985bd09030af6d80543dfd886f..d10a98396c7f75566ed0064ba9fa392b2bc54d7a 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -1752,6 +1752,10 @@ convert_combining_aggrefs(Node *node, void *context)
 		Aggref	   *child_agg;
 		Aggref	   *parent_agg;
 
+		/* Assert we've not chosen to partial-ize any unsupported cases */
+		Assert(orig_agg->aggorder == NIL);
+		Assert(orig_agg->aggdistinct == NIL);
+
 		/*
 		 * Since aggregate calls can't be nested, we needn't recurse into the
 		 * arguments.  But for safety, flat-copy the Aggref node itself rather
@@ -1762,13 +1766,17 @@ convert_combining_aggrefs(Node *node, void *context)
 
 		/*
 		 * For the parent Aggref, we want to copy all the fields of the
-		 * original aggregate *except* the args list.  Rather than explicitly
-		 * knowing what they all are here, we can momentarily modify child_agg
-		 * to provide a source for copyObject.
+		 * original aggregate *except* the args list, which we'll replace
+		 * below, and the aggfilter expression, which should be applied only
+		 * by the child not the parent.  Rather than explicitly knowing about
+		 * all the other fields here, we can momentarily modify child_agg to
+		 * provide a suitable source for copyObject.
 		 */
 		child_agg->args = NIL;
+		child_agg->aggfilter = NULL;
 		parent_agg = (Aggref *) copyObject(child_agg);
 		child_agg->args = orig_agg->args;
+		child_agg->aggfilter = orig_agg->aggfilter;
 
 		/*
 		 * Now, set up child_agg to represent the first phase of partial