-- Without ORDER BY clause, to test Gather at top-most path
EXPLAIN (COSTS ON)
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3;
                                                    QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1869.39..2823.15 rows=8 width=52)
   Workers Planned: 2
   ->  Parallel Append  (cost=869.39..1822.35 rows=4 width=52)
         ->  GroupAggregate  (cost=998.04..1178.25 rows=4 width=52)
               Group Key: pagg_tab_ml.a
               Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
               ->  Sort  (cost=998.04..1028.04 rows=12000 width=13)
                     Sort Key: pagg_tab_ml.a
                     ->  Seq Scan on pagg_tab_ml_p1 pagg_tab_ml  (cost=0.00..185.00 rows=12000 width=13)
         ->  GroupAggregate  (cost=869.39..1019.56 rows=3 width=52)
               Group Key: pagg_tab_ml_5.a
               Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
               ->  Sort  (cost=869.39..894.39 rows=10000 width=13)
                     Sort Key: pagg_tab_ml_5.a
                     ->  Append  (cost=0.00..205.00 rows=10000 width=13)
                           ->  Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5  (cost=0.00..108.00 rows=7000 width=13)
                           ->  Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6  (cost=0.00..47.00 rows=3000 width=13)
         ->  GroupAggregate  (cost=682.63..802.77 rows=3 width=52)
               Group Key: pagg_tab_ml_2.a
               Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
               ->  Sort  (cost=682.63..702.63 rows=8000 width=13)
                     Sort Key: pagg_tab_ml_2.a
                     ->  Append  (cost=0.00..164.00 rows=8000 width=13)
                           ->  Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2  (cost=0.00..93.00 rows=6000 width=13)
                           ->  Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3  (cost=0.00..31.00 rows=2000 width=13)
(25 rows)

SET max_parallel_workers_per_gather = 0;
EXPLAIN (COSTS ON)
SELECT a, sum(b), array_agg(distinct c), count(*) FROM pagg_tab_ml GROUP BY a HAVING avg(b) < 3;
                                                 QUERY PLAN                                                  
-------------------------------------------------------------------------------------------------------------
 Append  (cost=998.04..3000.64 rows=10 width=52)
   ->  GroupAggregate  (cost=998.04..1178.25 rows=4 width=52)
         Group Key: pagg_tab_ml.a
         Filter: (avg(pagg_tab_ml.b) < '3'::numeric)
         ->  Sort  (cost=998.04..1028.04 rows=12000 width=13)
               Sort Key: pagg_tab_ml.a
               ->  Seq Scan on pagg_tab_ml_p1 pagg_tab_ml  (cost=0.00..185.00 rows=12000 width=13)
   ->  GroupAggregate  (cost=682.63..802.77 rows=3 width=52)
         Group Key: pagg_tab_ml_2.a
         Filter: (avg(pagg_tab_ml_2.b) < '3'::numeric)
         ->  Sort  (cost=682.63..702.63 rows=8000 width=13)
               Sort Key: pagg_tab_ml_2.a
               ->  Append  (cost=0.00..164.00 rows=8000 width=13)
                     ->  Seq Scan on pagg_tab_ml_p2_s1 pagg_tab_ml_2  (cost=0.00..93.00 rows=6000 width=13)
                     ->  Seq Scan on pagg_tab_ml_p2_s2 pagg_tab_ml_3  (cost=0.00..31.00 rows=2000 width=13)
   ->  GroupAggregate  (cost=869.39..1019.56 rows=3 width=52)
         Group Key: pagg_tab_ml_5.a
         Filter: (avg(pagg_tab_ml_5.b) < '3'::numeric)
         ->  Sort  (cost=869.39..894.39 rows=10000 width=13)
               Sort Key: pagg_tab_ml_5.a
               ->  Append  (cost=0.00..205.00 rows=10000 width=13)
                     ->  Seq Scan on pagg_tab_ml_p3_s1 pagg_tab_ml_5  (cost=0.00..108.00 rows=7000 width=13)
                     ->  Seq Scan on pagg_tab_ml_p3_s2 pagg_tab_ml_6  (cost=0.00..47.00 rows=3000 width=13)
(23 rows)

RESET max_parallel_workers_per_gather;
