@@ -1290,37 +1290,33 @@ explain (costs off) select a,c from t1 group by a,c,d;
12901290explain (costs off) select *
12911291from t1 inner join t2 on t1.a = t2.x and t1.b = t2.y
12921292group by t1.a,t1.b,t1.c,t1.d,t2.x,t2.y,t2.z;
1293- QUERY PLAN
1294- ------------------------------------------------------------
1295- GroupAggregate
1296- Group Key: t1.a, t1.b, t2.x, t2.y
1297- -> Sort
1298- Sort Key: t1.a, t1.b
1299- -> Hash Join
1300- Hash Cond: ((t2.x = t1.a) AND (t2.y = t1.b))
1301- -> Seq Scan on t2
1302- -> Hash
1303- -> Seq Scan on t1
1293+ QUERY PLAN
1294+ ------------------------------------------------------
1295+ HashAggregate
1296+ Group Key: t1.a, t1.b
1297+ -> Hash Join
1298+ Hash Cond: ((t2.x = t1.a) AND (t2.y = t1.b))
1299+ -> Seq Scan on t2
1300+ -> Hash
1301+ -> Seq Scan on t1
13041302 Optimizer: Postgres query optimizer
1305- (10 rows)
1303+ (8 rows)
13061304
13071305-- Test case where t1 can be optimized but not t2
13081306explain (costs off) select t1.*,t2.x,t2.z
13091307from t1 inner join t2 on t1.a = t2.x and t1.b = t2.y
13101308group by t1.a,t1.b,t1.c,t1.d,t2.x,t2.z;
1311- QUERY PLAN
1312- ------------------------------------------------------------
1313- GroupAggregate
1314- Group Key: t1.a, t1.b, t2.x, t2.z
1315- -> Sort
1316- Sort Key: t1.a, t1.b, t2.z
1317- -> Hash Join
1318- Hash Cond: ((t2.x = t1.a) AND (t2.y = t1.b))
1319- -> Seq Scan on t2
1320- -> Hash
1321- -> Seq Scan on t1
1309+ QUERY PLAN
1310+ ------------------------------------------------------
1311+ HashAggregate
1312+ Group Key: t1.a, t1.b, t2.z
1313+ -> Hash Join
1314+ Hash Cond: ((t2.x = t1.a) AND (t2.y = t1.b))
1315+ -> Seq Scan on t2
1316+ -> Hash
1317+ -> Seq Scan on t1
13221318 Optimizer: Postgres query optimizer
1323- (10 rows)
1319+ (8 rows)
13241320
13251321-- Cannot optimize when PK is deferrable
13261322explain (costs off) select * from t3 group by a,b,c;
@@ -1564,7 +1560,7 @@ select * from agg_view1;
15641560select pg_get_viewdef('agg_view1'::regclass);
15651561 pg_get_viewdef
15661562---------------------------------------------------------------------------------------------------------------------
1567- SELECT aggfns(v. a, v. b, v. c) AS aggfns +
1563+ SELECT aggfns(a, b, c) AS aggfns +
15681564 FROM ( VALUES (1,3,'foo'::text), (0,NULL::integer,NULL::text), (2,2,'bar'::text), (3,1,'baz'::text)) v(a, b, c);
15691565(1 row)
15701566
@@ -1616,7 +1612,7 @@ select * from agg_view1;
16161612select pg_get_viewdef('agg_view1'::regclass);
16171613 pg_get_viewdef
16181614---------------------------------------------------------------------------------------------------------------------
1619- SELECT aggfns(v. a, v. b, v. c ORDER BY (v. b + 1)) AS aggfns +
1615+ SELECT aggfns(a, b, c ORDER BY (b + 1)) AS aggfns +
16201616 FROM ( VALUES (1,3,'foo'::text), (0,NULL::integer,NULL::text), (2,2,'bar'::text), (3,1,'baz'::text)) v(a, b, c);
16211617(1 row)
16221618
@@ -1632,7 +1628,7 @@ select * from agg_view1;
16321628select pg_get_viewdef('agg_view1'::regclass);
16331629 pg_get_viewdef
16341630---------------------------------------------------------------------------------------------------------------------
1635- SELECT aggfns(v. a, v. a, v. c ORDER BY v. b) AS aggfns +
1631+ SELECT aggfns(a, a, c ORDER BY b) AS aggfns +
16361632 FROM ( VALUES (1,3,'foo'::text), (0,NULL::integer,NULL::text), (2,2,'bar'::text), (3,1,'baz'::text)) v(a, b, c);
16371633(1 row)
16381634
@@ -1648,7 +1644,7 @@ select * from agg_view1;
16481644select pg_get_viewdef('agg_view1'::regclass);
16491645 pg_get_viewdef
16501646---------------------------------------------------------------------------------------------------------------------
1651- SELECT aggfns(v. a, v. b, v. c ORDER BY v. c USING ~<~ NULLS LAST) AS aggfns +
1647+ SELECT aggfns(a, b, c ORDER BY c USING ~<~ NULLS LAST) AS aggfns +
16521648 FROM ( VALUES (1,3,'foo'::text), (0,NULL::integer,NULL::text), (2,2,'bar'::text), (3,1,'baz'::text)) v(a, b, c);
16531649(1 row)
16541650
@@ -1866,14 +1862,14 @@ from generate_series(1,5) x,
18661862 (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p)
18671863group by p order by p;
18681864ERROR: sum is not an ordered-set aggregate, so it cannot have WITHIN GROUP
1869- LINE 1: select p, sum() within group (order by x::float8)
1865+ LINE 1: select p, sum() within group (order by x::float8) -- error
18701866 ^
18711867select p, percentile_cont(p,p) -- error
18721868from generate_series(1,5) x,
18731869 (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p)
18741870group by p order by p;
18751871ERROR: WITHIN GROUP is required for ordered-set aggregate percentile_cont
1876- LINE 1: select p, percentile_cont(p,p)
1872+ LINE 1: select p, percentile_cont(p,p) -- error
18771873 ^
18781874select percentile_cont(0.5) within group (order by b) from aggtest;
18791875 percentile_cont
@@ -2070,15 +2066,15 @@ select ten,
20702066reset optimizer_trace_fallback;
20712067-- end_ignore
20722068select pg_get_viewdef('aggordview1');
2073- pg_get_viewdef
2074- -------------------------------------------------------------------------------------------------------------------------------
2075- SELECT tenk1. ten, +
2076- percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY tenk1. thousand) AS p50, +
2077- percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY tenk1. thousand) FILTER (WHERE (tenk1. hundred = 1)) AS px,+
2078- rank(5, 'AZZZZ'::name, 50) WITHIN GROUP (ORDER BY tenk1. hundred, tenk1. string4 DESC, tenk1. hundred) AS rank +
2079- FROM tenk1 +
2080- GROUP BY tenk1. ten +
2081- ORDER BY tenk1. ten;
2069+ pg_get_viewdef
2070+ -------------------------------------------------------------------------------------------------------------------
2071+ SELECT ten, +
2072+ percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY thousand) AS p50, +
2073+ percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY thousand) FILTER (WHERE (hundred = 1)) AS px,+
2074+ rank(5, 'AZZZZ'::name, 50) WITHIN GROUP (ORDER BY hundred, string4 DESC, hundred) AS rank +
2075+ FROM tenk1 +
2076+ GROUP BY ten +
2077+ ORDER BY ten;
20822078(1 row)
20832079
20842080-- start_ignore
@@ -2309,14 +2305,14 @@ from generate_series(1,5) x,
23092305 (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p)
23102306group by p order by p;
23112307ERROR: sum is not an ordered-set aggregate, so it cannot have WITHIN GROUP
2312- LINE 1: select p, sum() within group (order by x::float8)
2308+ LINE 1: select p, sum() within group (order by x::float8) -- error
23132309 ^
23142310select p, percentile_cont(p,p) -- error
23152311from generate_series(1,5) x,
23162312 (values (0::float8),(0.1),(0.25),(0.4),(0.5),(0.6),(0.75),(0.9),(1)) v(p)
23172313group by p order by p;
23182314ERROR: WITHIN GROUP is required for ordered-set aggregate percentile_cont
2319- LINE 1: select p, percentile_cont(p,p)
2315+ LINE 1: select p, percentile_cont(p,p) -- error
23202316 ^
23212317select percentile_cont(0.5) within group (order by b) from aggtest;
23222318 percentile_cont
@@ -2513,15 +2509,15 @@ select ten,
25132509reset optimizer_trace_fallback;
25142510-- end_ignore
25152511select pg_get_viewdef('aggordview1');
2516- pg_get_viewdef
2517- -------------------------------------------------------------------------------------------------------------------------------
2518- SELECT tenk1. ten, +
2519- percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY tenk1. thousand) AS p50, +
2520- percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY tenk1. thousand) FILTER (WHERE (tenk1. hundred = 1)) AS px,+
2521- rank(5, 'AZZZZ'::name, 50) WITHIN GROUP (ORDER BY tenk1. hundred, tenk1. string4 DESC, tenk1. hundred) AS rank +
2522- FROM tenk1 +
2523- GROUP BY tenk1. ten +
2524- ORDER BY tenk1. ten;
2512+ pg_get_viewdef
2513+ -------------------------------------------------------------------------------------------------------------------
2514+ SELECT ten, +
2515+ percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY thousand) AS p50, +
2516+ percentile_disc((0.5)::double precision) WITHIN GROUP (ORDER BY thousand) FILTER (WHERE (hundred = 1)) AS px,+
2517+ rank(5, 'AZZZZ'::name, 50) WITHIN GROUP (ORDER BY hundred, string4 DESC, hundred) AS rank +
2518+ FROM tenk1 +
2519+ GROUP BY ten +
2520+ ORDER BY ten;
25252521(1 row)
25262522
25272523-- start_ignore
0 commit comments