Back to home page

OSCL-LXR

 
 

    


0001 --
0002 -- Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
0003 --
0004 --
0005 -- AGGREGATES [Part 1]
0006 -- https://github.com/postgres/postgres/blob/REL_12_BETA2/src/test/regress/sql/aggregates.sql#L1-L143
0007 
0008 -- avoid bit-exact output here because operations may not be bit-exact.
0009 -- SET extra_float_digits = 0;
0010 
0011 -- Test aggregate operator with codegen on and off.
0012 --CONFIG_DIM1 spark.sql.codegen.wholeStage=true
0013 --CONFIG_DIM1 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=CODEGEN_ONLY
0014 --CONFIG_DIM1 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=NO_CODEGEN
0015 
0016 SELECT avg(four) AS avg_1 FROM onek;
0017 
0018 SELECT avg(a) AS avg_32 FROM aggtest WHERE a < 100;
0019 
0020 -- In 7.1, avg(float4) is computed using float8 arithmetic.
0021 -- Round the result to 3 digits to avoid platform-specific results.
0022 
0023 select CAST(avg(b) AS Decimal(10,3)) AS avg_107_943 FROM aggtest;
0024 -- `student` has a column with data type POINT, which is not supported by Spark [SPARK-27766]
0025 -- SELECT avg(gpa) AS avg_3_4 FROM ONLY student;
0026 
0027 SELECT sum(four) AS sum_1500 FROM onek;
0028 SELECT sum(a) AS sum_198 FROM aggtest;
0029 SELECT sum(b) AS avg_431_773 FROM aggtest;
0030 -- `student` has a column with data type POINT, which is not supported by Spark [SPARK-27766]
0031 -- SELECT sum(gpa) AS avg_6_8 FROM ONLY student;
0032 
0033 SELECT max(four) AS max_3 FROM onek;
0034 SELECT max(a) AS max_100 FROM aggtest;
0035 SELECT max(aggtest.b) AS max_324_78 FROM aggtest;
0036 -- `student` has a column with data type POINT, which is not supported by Spark [SPARK-27766]
0037 -- SELECT max(student.gpa) AS max_3_7 FROM student;
0038 
0039 SELECT stddev_pop(b) FROM aggtest;
0040 SELECT stddev_samp(b) FROM aggtest;
0041 SELECT var_pop(b) FROM aggtest;
0042 SELECT var_samp(b) FROM aggtest;
0043 
0044 SELECT stddev_pop(CAST(b AS Decimal(38,0))) FROM aggtest;
0045 SELECT stddev_samp(CAST(b AS Decimal(38,0))) FROM aggtest;
0046 SELECT var_pop(CAST(b AS Decimal(38,0))) FROM aggtest;
0047 SELECT var_samp(CAST(b AS Decimal(38,0))) FROM aggtest;
0048 
0049 -- population variance is defined for a single tuple, sample variance
0050 -- is not
0051 SELECT var_pop(1.0), var_samp(2.0);
0052 SELECT stddev_pop(CAST(3.0 AS Decimal(38,0))), stddev_samp(CAST(4.0 AS Decimal(38,0)));
0053 
0054 
0055 -- verify correct results for null and NaN inputs
0056 select sum(CAST(null AS int)) from range(1,4);
0057 select sum(CAST(null AS long)) from range(1,4);
0058 select sum(CAST(null AS Decimal(38,0))) from range(1,4);
0059 select sum(CAST(null AS DOUBLE)) from range(1,4);
0060 select avg(CAST(null AS int)) from range(1,4);
0061 select avg(CAST(null AS long)) from range(1,4);
0062 select avg(CAST(null AS Decimal(38,0))) from range(1,4);
0063 select avg(CAST(null AS DOUBLE)) from range(1,4);
0064 select sum(CAST('NaN' AS DOUBLE)) from range(1,4);
0065 select avg(CAST('NaN' AS DOUBLE)) from range(1,4);
0066 
0067 SELECT avg(CAST(x AS DOUBLE)), var_pop(CAST(x AS DOUBLE))
0068 FROM (VALUES (CAST('1' AS DOUBLE)), (CAST('infinity' AS DOUBLE))) v(x);
0069 SELECT avg(CAST(x AS DOUBLE)), var_pop(CAST(x AS DOUBLE))
0070 FROM (VALUES ('infinity'), ('1')) v(x);
0071 SELECT avg(CAST(x AS DOUBLE)), var_pop(CAST(x AS DOUBLE))
0072 FROM (VALUES ('infinity'), ('infinity')) v(x);
0073 SELECT avg(CAST(x AS DOUBLE)), var_pop(CAST(x AS DOUBLE))
0074 FROM (VALUES ('-infinity'), ('infinity')) v(x);
0075 
0076 -- test accuracy with a large input offset
0077 SELECT avg(CAST(x AS DOUBLE)), var_pop(CAST(x AS DOUBLE))
0078 FROM (VALUES (100000003), (100000004), (100000006), (100000007)) v(x);
0079 SELECT avg(CAST(x AS DOUBLE)), var_pop(CAST(x AS DOUBLE))
0080 FROM (VALUES (7000000000005), (7000000000007)) v(x);
0081 
0082 -- SQL2003 binary aggregates [SPARK-23907]
0083 -- SELECT regr_count(b, a) FROM aggtest;
0084 -- SELECT regr_sxx(b, a) FROM aggtest;
0085 -- SELECT regr_syy(b, a) FROM aggtest;
0086 -- SELECT regr_sxy(b, a) FROM aggtest;
0087 -- SELECT regr_avgx(b, a), regr_avgy(b, a) FROM aggtest;
0088 -- SELECT regr_r2(b, a) FROM aggtest;
0089 -- SELECT regr_slope(b, a), regr_intercept(b, a) FROM aggtest;
0090 SELECT covar_pop(b, a), covar_samp(b, a) FROM aggtest;
0091 SELECT corr(b, a) FROM aggtest;
0092 
0093 
0094 -- test accum and combine functions directly [SPARK-23907]
0095 -- CREATE TABLE regr_test (x float8, y float8);
0096 -- INSERT INTO regr_test VALUES (10,150),(20,250),(30,350),(80,540),(100,200);
0097 -- SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
0098 -- FROM regr_test WHERE x IN (10,20,30,80);
0099 -- SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
0100 -- FROM regr_test;
0101 -- SELECT float8_accum('{4,140,2900}'::float8[], 100);
0102 -- SELECT float8_regr_accum('{4,140,2900,1290,83075,15050}'::float8[], 200, 100);
0103 -- SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
0104 -- FROM regr_test WHERE x IN (10,20,30);
0105 -- SELECT count(*), sum(x), regr_sxx(y,x), sum(y),regr_syy(y,x), regr_sxy(y,x)
0106 -- FROM regr_test WHERE x IN (80,100);
0107 -- SELECT float8_combine('{3,60,200}'::float8[], '{0,0,0}'::float8[]);
0108 -- SELECT float8_combine('{0,0,0}'::float8[], '{2,180,200}'::float8[]);
0109 -- SELECT float8_combine('{3,60,200}'::float8[], '{2,180,200}'::float8[]);
0110 -- SELECT float8_regr_combine('{3,60,200,750,20000,2000}'::float8[],
0111 --                            '{0,0,0,0,0,0}'::float8[]);
0112 -- SELECT float8_regr_combine('{0,0,0,0,0,0}'::float8[],
0113 --                            '{2,180,200,740,57800,-3400}'::float8[]);
0114 -- SELECT float8_regr_combine('{3,60,200,750,20000,2000}'::float8[],
0115 --                            '{2,180,200,740,57800,-3400}'::float8[]);
0116 -- DROP TABLE regr_test;
0117 
0118 
0119 -- test count, distinct
0120 SELECT count(four) AS cnt_1000 FROM onek;
0121 SELECT count(DISTINCT four) AS cnt_4 FROM onek;
0122 
0123 select ten, count(*), sum(four) from onek
0124 group by ten order by ten;
0125 
0126 select ten, count(four), sum(DISTINCT four) from onek
0127 group by ten order by ten;
0128 
0129 -- user-defined aggregates
0130 -- SELECT newavg(four) AS avg_1 FROM onek;
0131 -- SELECT newsum(four) AS sum_1500 FROM onek;
0132 -- SELECT newcnt(four) AS cnt_1000 FROM onek;
0133 -- SELECT newcnt(*) AS cnt_1000 FROM onek;
0134 -- SELECT oldcnt(*) AS cnt_1000 FROM onek;
0135 -- SELECT sum2(q1,q2) FROM int8_tbl;
0136 
0137 -- test for outer-level aggregates
0138 
0139 -- this should work
0140 select ten, sum(distinct four) from onek a
0141 group by ten
0142 having exists (select 1 from onek b where sum(distinct a.four) = b.four);
0143 
0144 -- this should fail because subquery has an agg of its own in WHERE
0145 select ten, sum(distinct four) from onek a
0146 group by ten
0147 having exists (select 1 from onek b
0148                where sum(distinct a.four + b.four) = b.four);
0149 
0150 -- [SPARK-27769] Test handling of sublinks within outer-level aggregates.
0151 -- Per bug report from Daniel Grace.
0152 select
0153   (select max((select i.unique2 from tenk1 i where i.unique1 = o.unique1)))
0154 from tenk1 o;