blob: 352b38b674fccd4945bdfd42ec32d84839010d54 [file] [log] [blame]
create table perct as select a, a / 10 as b from generate_series(1, 100)a;
create table perct2 as select a, a / 10 as b from generate_series(1, 100)a, generate_series(1, 2);
create table perct3 as select a, b from perct, generate_series(1, 10)i where a % 7 < i;
create table perct4 as select case when a % 10 = 5 then null else a end as a,
b, null::float as c from perct;
create table percts as select '2012-01-01 00:00:00'::timestamp + interval '1day' * i as a,
i / 10 as b, i as c from generate_series(1, 100)i;
create table perctsz as select '2012-01-01 00:00:00 UTC'::timestamptz + interval '1day' * i as a,
i / 10 as b, i as c from generate_series(1, 100)i;
create view percv as select percentile_cont(0.4) within group (order by a / 10),
median(a), percentile_disc(0.51) within group (order by a desc) from perct group by b order by b;
create view percv2 as select median(a) as m1, median(a::float) as m2 from perct;
create table mpp_22219(col_a character(2) NOT NULL, dkey_a character varying(8) NOT NULL, value double precision)
WITH (APPENDONLY=true, COMPRESSLEVEL=5, ORIENTATION=column, COMPRESSTYPE=zlib, OIDS=FALSE)
DISTRIBUTED BY (dkey_a);
insert into mpp_22219 select i, i, i from (select * from generate_series(1, 20) i ) a ;
create table mpp_21026 ( t1 varchar(10), t2 int);
insert into mpp_21026 select i, i from (select * from generate_series(1, 20) i ) a ;
create table mpp_20076 (col1 timestamp, col2 int);
insert into mpp_20076 select to_timestamp(i),i from generate_series(1,20) i;
CREATE TABLE mpp_22413
(
col_a character(2) NOT NULL,
d1 character varying(8) NOT NULL,
d2 character varying(8) NOT NULL,
d3 character varying(8) NOT NULL,
value1 double precision,
value2 double precision
)
WITH (OIDS=FALSE)
DISTRIBUTED BY (d1,d2,d3);
insert into mpp_22413
select i, i, i, i, i,i
from (select * from generate_series(1, 99) i ) a ;
-- We test the same queries with gp_idf_deduplicate none/force. Make sure
-- both tests have the same when adding.
set gp_idf_deduplicate to none;
select percentile_cont(0.5) within group (order by a),
median(a), percentile_disc(0.5) within group(order by a) from perct;
select b, percentile_cont(0.5) within group (order by a),
median(a), percentile_disc(0.5) within group(order by a) from perct group by b order by b;
select percentile_cont(0.2) within group (order by a) from generate_series(1, 100)a;
select a / 10, percentile_cont(0.2) within group (order by a) from generate_series(1, 100)a
group by a / 10 order by a / 10;
select percentile_cont(0.2) within group (order by a),
percentile_cont(0.8) within group (order by a desc) from perct group by b order by b;
select percentile_cont(0.1) within group (order by a), count(*), sum(a) from perct
group by b order by b;
select percentile_cont(0.6) within group (order by a), count(*), sum(a) from perct;
select percentile_cont(0.3) within group (order by a) + count(*) from perct group by b order by b;
select median(a) from perct group by b having median(a) = 5;
select median(a), percentile_cont(0.6) within group (order by a desc) from perct group by b having count(*) > 1 order by 1;
select median(10);
select count(*), median(b+1) from perct group by b+2
having median(b+1) in (select avg(b+1) from perct group by b+2);
select median(a) from perct2;
select median(a) from perct2 group by b order by b;
select b, count(*), count(distinct a), median(a) from perct3 group by b order by b;
select b+1, count(*), count(distinct a),
median(a), percentile_cont(0.3) within group (order by a desc)
from perct group by b+1 order by b+1;
select median(a), median(c) from perct4;
select median(a), median(c) from perct4 group by b;
select count(*) over (partition by b), median(a) from perct group by b order by b;
select sum(median(a)) over (partition by b) from perct group by b order by b;
select percentile_disc(0) within group (order by a) from perct;
prepare p (float) as select percentile_cont($1) within group (order by a)
from perct group by b order by b;
execute p(0.1);
execute p(0.8);
deallocate p;
select sum((select median(a) from perct)) from perct;
select percentile_cont(null) within group (order by a) from perct;
select percentile_cont(null) within group (order by a),
percentile_disc(null) within group (order by a desc) from perct group by b;
select median(a), percentile_cont(0.5) within group (order by a),
percentile_disc(0.5) within group(order by a),
(select min(a) from percts) - interval '1day' + interval '1day' * median(c),
(select min(a) from percts) - interval '1day' + interval '1day' *
percentile_disc(0.5) within group (order by c)
from percts group by b order by b;
select percentile_cont(1.0/86400) within group (order by a) from percts
where c between 1 and 2;
select percentile_cont(0.1) within group (order by a),
percentile_cont(0.9) within group (order by a desc) from percts;
select percentile_cont(0.1) within group (order by a),
percentile_cont(0.2) within group (order by a) from perctsz;
select median(a - (select min(a) from percts)) from percts;
select median(a), b from perct group by b order by b desc;
select count(*) from(select median(a) from perct group by ())s;
select median(a) from perct group by grouping sets((b)) order by b;
select distinct median(a), count(*) from perct;
select perct.a, 0.2*avg(perct2.a) as avga,
percentile_cont(0.34)within group(order by perct2.b)
from
(select a, a / 10 b from generate_series(1, 100)a)perct,
(select a, a / 10 b from generate_series(1, 100)a)perct2
where perct.a=perct2.a group by perct.a having median(perct.b) > 10;
select median(a - '2011-12-31 00:00:00 UTC'::timestamptz) from perctsz group by b order by median;
-- view
select * from percv;
set gp_idf_deduplicate to force;
select percentile_cont(0.5) within group (order by a),
median(a), percentile_disc(0.5) within group(order by a) from perct;
select b, percentile_cont(0.5) within group (order by a),
median(a), percentile_disc(0.5) within group(order by a) from perct group by b order by b;
select percentile_cont(0.2) within group (order by a) from generate_series(1, 100)a;
select a / 10, percentile_cont(0.2) within group (order by a) from generate_series(1, 100)a
group by a / 10 order by a / 10;
select percentile_cont(0.2) within group (order by a),
percentile_cont(0.8) within group (order by a desc) from perct group by b order by b;
select percentile_cont(0.1) within group (order by a), count(*), sum(a) from perct
group by b order by b;
select percentile_cont(0.6) within group (order by a), count(*), sum(a) from perct;
select percentile_cont(0.3) within group (order by a) + count(*) from perct group by b order by b;
select median(a) from perct group by b having median(a) = 5;
select median(a), percentile_cont(0.6) within group (order by a desc) from perct group by b having count(*) > 1 order by 1;
select median(10);
select count(*), median(b+1) from perct group by b+2
having median(b+1) in (select avg(b+1) from perct group by b+2);
select median(a) from perct2;
select median(a) from perct2 group by b order by b;
select b, count(*), count(distinct a), median(a) from perct3 group by b order by b;
select b+1, count(*), count(distinct a),
median(a), percentile_cont(0.3) within group (order by a desc)
from perct group by b+1 order by b+1;
select median(a), median(c) from perct4;
select median(a), median(c) from perct4 group by b;
select count(*) over (partition by b), median(a) from perct group by b order by b;
select sum(median(a)) over (partition by b) from perct group by b order by b;
select percentile_disc(0) within group (order by a) from perct;
prepare p (float) as select percentile_cont($1) within group (order by a)
from perct group by b order by b;
execute p(0.1);
execute p(0.8);
deallocate p;
select sum((select median(a) from perct)) from perct;
select percentile_cont(null) within group (order by a) from perct;
select percentile_cont(null) within group (order by a),
percentile_disc(null) within group (order by a desc) from perct group by b;
select median(a), percentile_cont(0.5) within group (order by a),
percentile_disc(0.5) within group(order by a),
(select min(a) from percts) - interval '1day' + interval '1day' * median(c),
(select min(a) from percts) - interval '1day' + interval '1day' *
percentile_disc(0.5) within group (order by c)
from percts group by b order by b;
select percentile_cont(1.0/86400) within group (order by a) from percts
where c between 1 and 2;
select percentile_cont(0.1) within group (order by a),
percentile_cont(0.9) within group (order by a desc) from percts;
select percentile_cont(0.1) within group (order by a),
percentile_cont(0.2) within group (order by a) from perctsz;
select median(a - (select min(a) from percts)) from percts;
select median(a), b from perct group by b order by b desc;
select count(*) from(select median(a) from perct group by ())s;
select median(a) from perct group by grouping sets((b)) order by b;
select distinct median(a), count(*) from perct;
select perct.a, 0.2*avg(perct2.a) as avga,
percentile_cont(0.34)within group(order by perct2.b)
from
(select a, a / 10 b from generate_series(1, 100)a)perct,
(select a, a / 10 b from generate_series(1, 100)a)perct2
where perct.a=perct2.a group by perct.a having median(perct.b) > 10;
select median(a - '2011-12-31 00:00:00 UTC'::timestamptz) from perctsz group by b order by median;
-- view
select * from percv;
reset gp_idf_deduplicate;
select pg_get_viewdef('percv');
select pg_get_viewdef('percv2');
-- errors
-- no WITHIN GROUP clause
select percentile_cont(a) from perct;
-- the argument must not contain variable
select percentile_cont(a) within group (order by a) from perct;
-- ungrouped column
select b, percentile_disc(0.1) within group (order by a) from perct;
-- nested aggregate
select percentile_cont(count(*)) within group (order by a) from perct;
select sum(percentile_cont(0.22) within group (order by a)) from perct;
-- OVER clause
select percentile_cont(0.3333) within group (order by a) over (partition by a%2) from perct;
select median(a) over (partition by b) from perct group by b;
-- function scan
select * from median(10);
-- wrong type argument
select percentile_disc('a') within group (order by a) from perct;
-- nested case
select count(median(a)) from perct;
select median(count(*)) from perct;
select percentile_cont(0.2) within group (order by count(*) over()) from perct;
select percentile_disc(0.1) within group (order by group_id()) from perct;
-- subquery is not allowed to the argument
select percentile_cont((select 0.1 from gp_version_at_initdb)) within group (order by a) from perct;
-- the argument must not be volatile expression
select percentile_cont(random()) within group (order by a) from perct;
-- out of range
select percentile_cont(-0.1) within group (order by a) from perct;
select percentile_cont(1.00000001) within group (order by a) from perct;
-- CSQ is not supported currently. Shame.
select sum((select median(a) from perct where b = t.b)) from perct t;
-- used in LIMIT
select * from perct limit median(a);
-- multiple sort key
select percentile_cont(0.8) within group (order by a, a + 1, a + 2) from perct;
-- set-returning
select generate_series(1, 2), median(a) from perct;
-- GROUPING SETS
select median(a) from perct group by grouping sets((), (b));
-- wrong type in ORDER BY
select median('text') from perct;
select percentile_cont(now()) within group (order by a) from percts;
select percentile_cont(0.5) within group (order by point(0,0)) from perct;
-- outer reference is not allowed for now
select (select a from perct where median(t.a) = 5) from perct t;
-- MPP-22219
select count(*) from
(SELECT b.dkey_a, MEDIAN(B.VALUE)
FROM mpp_22219 B
GROUP BY b.dkey_a) s;
select count(*) from
(SELECT b.dkey_a, percentile_cont(0.5) within group (order by b.VALUE)
FROM mpp_22219 B
GROUP BY b.dkey_a) s;
-- MPP-21026
select median(t2) from mpp_21026 group by t1;
-- MPP-20076
select 1, to_char(col1, 'YYYY'), median(col2) from mpp_20076 group by 1, 2;
select 1, col1, median(col2) from mpp_20076 group by 1, 2;
select to_char(col1, 'YYYY') AS tstmp_column, median(col2) from mpp_20076 group by 1;
select 1, median(col2) from mpp_20076 group by 1;
-- MPP-22413
select median(value1), count(*)
from mpp_22413
where d2 ='55'
group by d1, d2, d3, value2;
select median(value1), count(*)
from mpp_22413
where d2 ='55'
group by d1, d2, d3, value2::int;
select median(value1), count(*)
from mpp_22413
where d2 ='55'
group by d1, d2, d3, value2::varchar;
select median(value1), count(*)
from mpp_22413
where d2 ='55'
group by d1, d2, value2;
select median(value1), count(*)
from mpp_22413
where d2 ='55'
group by d1, d2, value2, d3;
select median(value1), count(*)
from mpp_22413
where d2 ='55'
group by d1, d2;
drop view percv2;
drop view percv;
drop table perct;
drop table perct2;
drop table perct3;
drop table perct4;
drop table percts;
drop table perctsz;
drop table mpp_22219;
drop table mpp_21026;
drop table mpp_20076;
drop table mpp_22413;