|
||||
0001 -- Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group 0002 -- 0003 -- Window Functions Testing 0004 -- https://github.com/postgres/postgres/blob/REL_12_STABLE/src/test/regress/sql/window.sql#L1-L319 0005 0006 -- Test window operator with codegen on and off. 0007 --CONFIG_DIM1 spark.sql.codegen.wholeStage=true 0008 --CONFIG_DIM1 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=CODEGEN_ONLY 0009 --CONFIG_DIM1 spark.sql.codegen.wholeStage=false,spark.sql.codegen.factoryMode=NO_CODEGEN 0010 0011 CREATE TEMPORARY VIEW tenk2 AS SELECT * FROM tenk1; 0012 0013 -- [SPARK-29540] Thrift in some cases can't parse string to date 0014 -- CREATE TABLE empsalary ( 0015 -- depname string, 0016 -- empno integer, 0017 -- salary int, 0018 -- enroll_date date 0019 -- ) USING parquet; 0020 0021 -- [SPARK-29540] Thrift in some cases can't parse string to date 0022 -- INSERT INTO empsalary VALUES ('develop', 10, 5200, '2007-08-01'); 0023 -- INSERT INTO empsalary VALUES ('sales', 1, 5000, '2006-10-01'); 0024 -- INSERT INTO empsalary VALUES ('personnel', 5, 3500, '2007-12-10'); 0025 -- INSERT INTO empsalary VALUES ('sales', 4, 4800, '2007-08-08'); 0026 -- INSERT INTO empsalary VALUES ('personnel', 2, 3900, '2006-12-23'); 0027 -- INSERT INTO empsalary VALUES ('develop', 7, 4200, '2008-01-01'); 0028 -- INSERT INTO empsalary VALUES ('develop', 9, 4500, '2008-01-01'); 0029 -- INSERT INTO empsalary VALUES ('sales', 3, 4800, '2007-08-01'); 0030 -- INSERT INTO empsalary VALUES ('develop', 8, 6000, '2006-10-01'); 0031 -- INSERT INTO empsalary VALUES ('develop', 11, 5200, '2007-08-15'); 0032 0033 -- [SPARK-29540] Thrift in some cases can't parse string to date 0034 -- SELECT depname, empno, salary, sum(salary) OVER (PARTITION BY depname) FROM empsalary ORDER BY depname, salary; 0035 0036 -- [SPARK-29540] Thrift in some cases can't parse string to date 0037 -- SELECT depname, empno, salary, rank() OVER (PARTITION BY depname ORDER BY salary) FROM empsalary; 0038 0039 -- with GROUP BY 0040 SELECT four, ten, SUM(SUM(four)) OVER (PARTITION BY four), AVG(ten) FROM tenk1 0041 GROUP BY four, ten ORDER BY four, ten; 0042 0043 -- [SPARK-29540] Thrift in some cases can't parse string to date 0044 -- SELECT depname, empno, salary, sum(salary) OVER w FROM empsalary WINDOW w AS (PARTITION BY depname); 0045 0046 -- [SPARK-28064] Order by does not accept a call to rank() 0047 -- SELECT depname, empno, salary, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary) ORDER BY rank() OVER w; 0048 0049 -- empty window specification 0050 SELECT COUNT(*) OVER () FROM tenk1 WHERE unique2 < 10; 0051 0052 SELECT COUNT(*) OVER w FROM tenk1 WHERE unique2 < 10 WINDOW w AS (); 0053 0054 -- no window operation 0055 SELECT four FROM tenk1 WHERE FALSE WINDOW w AS (PARTITION BY ten); 0056 0057 -- cumulative aggregate 0058 SELECT sum(four) OVER (PARTITION BY ten ORDER BY unique2) AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10; 0059 0060 SELECT row_number() OVER (ORDER BY unique2) FROM tenk1 WHERE unique2 < 10; 0061 0062 SELECT rank() OVER (PARTITION BY four ORDER BY ten) AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10; 0063 0064 SELECT dense_rank() OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0065 0066 SELECT percent_rank() OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0067 0068 SELECT cume_dist() OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0069 0070 SELECT ntile(3) OVER (ORDER BY ten, four), ten, four FROM tenk1 WHERE unique2 < 10; 0071 0072 -- [SPARK-28065] ntile does not accept NULL as input 0073 -- SELECT ntile(NULL) OVER (ORDER BY ten, four), ten, four FROM tenk1 LIMIT 2; 0074 0075 SELECT lag(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0076 0077 -- [SPARK-28068] `lag` second argument must be a literal in Spark 0078 -- SELECT lag(ten, four) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0079 0080 -- [SPARK-28068] `lag` second argument must be a literal in Spark 0081 -- SELECT lag(ten, four, 0) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0082 0083 SELECT lead(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0084 0085 SELECT lead(ten * 2, 1) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0086 0087 SELECT lead(ten * 2, 1, -1) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0088 0089 SELECT first(ten) OVER (PARTITION BY four ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0090 0091 -- last returns the last row of the frame, which is CURRENT ROW in ORDER BY window. 0092 SELECT last(four) OVER (ORDER BY ten), ten, four FROM tenk1 WHERE unique2 < 10; 0093 0094 SELECT last(ten) OVER (PARTITION BY four), ten, four FROM 0095 (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten)s 0096 ORDER BY four, ten; 0097 0098 -- [SPARK-27951] ANSI SQL: NTH_VALUE function 0099 -- SELECT nth_value(ten, four + 1) OVER (PARTITION BY four), ten, four 0100 -- FROM (SELECT * FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten)s; 0101 0102 SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER (PARTITION BY two ORDER BY ten) AS wsum 0103 FROM tenk1 GROUP BY ten, two; 0104 0105 SELECT count(*) OVER (PARTITION BY four), four FROM (SELECT * FROM tenk1 WHERE two = 1)s WHERE unique2 < 10; 0106 0107 SELECT (count(*) OVER (PARTITION BY four ORDER BY ten) + 0108 sum(hundred) OVER (PARTITION BY four ORDER BY ten)) AS cntsum 0109 FROM tenk1 WHERE unique2 < 10; 0110 0111 -- opexpr with different windows evaluation. 0112 SELECT * FROM( 0113 SELECT count(*) OVER (PARTITION BY four ORDER BY ten) + 0114 sum(hundred) OVER (PARTITION BY two ORDER BY ten) AS total, 0115 count(*) OVER (PARTITION BY four ORDER BY ten) AS fourcount, 0116 sum(hundred) OVER (PARTITION BY two ORDER BY ten) AS twosum 0117 FROM tenk1 0118 )sub WHERE total <> fourcount + twosum; 0119 0120 SELECT avg(four) OVER (PARTITION BY four ORDER BY thousand / 100) FROM tenk1 WHERE unique2 < 10; 0121 0122 SELECT ten, two, sum(hundred) AS gsum, sum(sum(hundred)) OVER win AS wsum 0123 FROM tenk1 GROUP BY ten, two WINDOW win AS (PARTITION BY two ORDER BY ten); 0124 0125 -- [SPARK-29540] Thrift in some cases can't parse string to date 0126 -- more than one window with GROUP BY 0127 -- SELECT sum(salary), 0128 -- row_number() OVER (ORDER BY depname), 0129 -- sum(sum(salary)) OVER (ORDER BY depname DESC) 0130 -- FROM empsalary GROUP BY depname; 0131 0132 -- [SPARK-29540] Thrift in some cases can't parse string to date 0133 -- identical windows with different names 0134 -- SELECT sum(salary) OVER w1, count(*) OVER w2 0135 -- FROM empsalary WINDOW w1 AS (ORDER BY salary), w2 AS (ORDER BY salary); 0136 0137 -- subplan 0138 -- [SPARK-28379] Correlated scalar subqueries must be aggregated 0139 -- SELECT lead(ten, (SELECT two FROM tenk1 WHERE s.unique2 = unique2)) OVER (PARTITION BY four ORDER BY ten) 0140 -- FROM tenk1 s WHERE unique2 < 10; 0141 0142 -- empty table 0143 SELECT count(*) OVER (PARTITION BY four) FROM (SELECT * FROM tenk1 WHERE FALSE)s; 0144 0145 -- [SPARK-29540] Thrift in some cases can't parse string to date 0146 -- mixture of agg/wfunc in the same window 0147 -- SELECT sum(salary) OVER w, rank() OVER w FROM empsalary WINDOW w AS (PARTITION BY depname ORDER BY salary DESC); 0148 0149 -- Cannot safely cast 'enroll_date': string to date; 0150 -- SELECT empno, depname, salary, bonus, depadj, MIN(bonus) OVER (ORDER BY empno), MAX(depadj) OVER () FROM( 0151 -- SELECT *, 0152 -- CASE WHEN enroll_date < '2008-01-01' THEN 2008 - extract(year FROM enroll_date) END * 500 AS bonus, 0153 -- CASE WHEN 0154 -- AVG(salary) OVER (PARTITION BY depname) < salary 0155 -- THEN 200 END AS depadj FROM empsalary 0156 -- )s; 0157 0158 create temporary view int4_tbl as select * from values 0159 (0), 0160 (123456), 0161 (-123456), 0162 (2147483647), 0163 (-2147483647) 0164 as int4_tbl(f1); 0165 0166 -- window function over ungrouped agg over empty row set (bug before 9.1) 0167 SELECT SUM(COUNT(f1)) OVER () FROM int4_tbl WHERE f1=42; 0168 0169 -- window function with ORDER BY an expression involving aggregates (9.1 bug) 0170 select ten, 0171 sum(unique1) + sum(unique2) as res, 0172 rank() over (order by sum(unique1) + sum(unique2)) as rank 0173 from tenk1 0174 group by ten order by ten; 0175 0176 -- window and aggregate with GROUP BY expression (9.2 bug) 0177 -- explain 0178 -- select first(max(x)) over (), y 0179 -- from (select unique1 as x, ten+four as y from tenk1) ss 0180 -- group by y; 0181 0182 -- test non-default frame specifications 0183 SELECT four, ten, 0184 sum(ten) over (partition by four order by ten), 0185 last(ten) over (partition by four order by ten) 0186 FROM (select distinct ten, four from tenk1) ss; 0187 0188 SELECT four, ten, 0189 sum(ten) over (partition by four order by ten range between unbounded preceding and current row), 0190 last(ten) over (partition by four order by ten range between unbounded preceding and current row) 0191 FROM (select distinct ten, four from tenk1) ss; 0192 0193 SELECT four, ten, 0194 sum(ten) over (partition by four order by ten range between unbounded preceding and unbounded following), 0195 last(ten) over (partition by four order by ten range between unbounded preceding and unbounded following) 0196 FROM (select distinct ten, four from tenk1) ss; 0197 0198 -- [SPARK-29451] Some queries with divisions in SQL windows are failling in Thrift 0199 -- SELECT four, ten/4 as two, 0200 -- sum(ten/4) over (partition by four order by ten/4 range between unbounded preceding and current row), 0201 -- last(ten/4) over (partition by four order by ten/4 range between unbounded preceding and current row) 0202 -- FROM (select distinct ten, four from tenk1) ss; 0203 0204 -- [SPARK-29451] Some queries with divisions in SQL windows are failling in Thrift 0205 -- SELECT four, ten/4 as two, 0206 -- sum(ten/4) over (partition by four order by ten/4 rows between unbounded preceding and current row), 0207 -- last(ten/4) over (partition by four order by ten/4 rows between unbounded preceding and current row) 0208 -- FROM (select distinct ten, four from tenk1) ss; 0209 0210 SELECT sum(unique1) over (order by four range between current row and unbounded following), 0211 unique1, four 0212 FROM tenk1 WHERE unique1 < 10; 0213 0214 SELECT sum(unique1) over (rows between current row and unbounded following), 0215 unique1, four 0216 FROM tenk1 WHERE unique1 < 10; 0217 0218 SELECT sum(unique1) over (rows between 2 preceding and 2 following), 0219 unique1, four 0220 FROM tenk1 WHERE unique1 < 10; 0221 0222 -- [SPARK-28428] Spark `exclude` always expecting `()` 0223 -- SELECT sum(unique1) over (rows between 2 preceding and 2 following exclude no others), 0224 -- unique1, four 0225 -- FROM tenk1 WHERE unique1 < 10; 0226 0227 -- [SPARK-28428] Spark `exclude` always expecting `()` 0228 -- SELECT sum(unique1) over (rows between 2 preceding and 2 following exclude current row), 0229 -- unique1, four 0230 -- FROM tenk1 WHERE unique1 < 10; 0231 0232 -- [SPARK-28428] Spark `exclude` always expecting `()` 0233 -- SELECT sum(unique1) over (rows between 2 preceding and 2 following exclude group), 0234 -- unique1, four 0235 -- FROM tenk1 WHERE unique1 < 10; 0236 0237 -- [SPARK-28428] Spark `exclude` always expecting `()` 0238 -- SELECT sum(unique1) over (rows between 2 preceding and 2 following exclude ties), 0239 -- unique1, four 0240 -- FROM tenk1 WHERE unique1 < 10; 0241 0242 -- [SPARK-28428] Spark `exclude` always expecting `()` 0243 -- SELECT first(unique1) over (ORDER BY four rows between current row and 2 following exclude current row), 0244 -- unique1, four 0245 -- FROM tenk1 WHERE unique1 < 10; 0246 0247 -- [SPARK-28428] Spark `exclude` always expecting `()` 0248 -- SELECT first(unique1) over (ORDER BY four rows between current row and 2 following exclude group), 0249 -- unique1, four 0250 -- FROM tenk1 WHERE unique1 < 10; 0251 0252 -- [SPARK-28428] Spark `exclude` always expecting `()` 0253 -- SELECT first(unique1) over (ORDER BY four rows between current row and 2 following exclude ties), 0254 -- unique1, four 0255 -- FROM tenk1 WHERE unique1 < 10; 0256 0257 -- [SPARK-28428] Spark `exclude` always expecting `()` 0258 -- SELECT last(unique1) over (ORDER BY four rows between current row and 2 following exclude current row), 0259 -- unique1, four 0260 -- FROM tenk1 WHERE unique1 < 10; 0261 0262 -- [SPARK-28428] Spark `exclude` always expecting `()` 0263 -- SELECT last(unique1) over (ORDER BY four rows between current row and 2 following exclude group), 0264 -- unique1, four 0265 -- FROM tenk1 WHERE unique1 < 10; 0266 0267 -- [SPARK-28428] Spark `exclude` always expecting `()` 0268 -- SELECT last(unique1) over (ORDER BY four rows between current row and 2 following exclude ties), 0269 -- unique1, four 0270 -- FROM tenk1 WHERE unique1 < 10; 0271 0272 SELECT sum(unique1) over (rows between 2 preceding and 1 preceding), 0273 unique1, four 0274 FROM tenk1 WHERE unique1 < 10; 0275 0276 SELECT sum(unique1) over (rows between 1 following and 3 following), 0277 unique1, four 0278 FROM tenk1 WHERE unique1 < 10; 0279 0280 SELECT sum(unique1) over (rows between unbounded preceding and 1 following), 0281 unique1, four 0282 FROM tenk1 WHERE unique1 < 10; 0283 0284 -- [SPARK-28428] Spark `exclude` always expecting `()` 0285 -- SELECT sum(unique1) over (w range between current row and unbounded following), 0286 -- unique1, four 0287 -- FROM tenk1 WHERE unique1 < 10 WINDOW w AS (order by four); 0288 0289 -- [SPARK-28428] Spark `exclude` always expecting `()` 0290 -- SELECT sum(unique1) over (w range between unbounded preceding and current row exclude current row), 0291 -- unique1, four 0292 -- FROM tenk1 WHERE unique1 < 10 WINDOW w AS (order by four); 0293 0294 -- [SPARK-28428] Spark `exclude` always expecting `()` 0295 -- SELECT sum(unique1) over (w range between unbounded preceding and current row exclude group), 0296 -- unique1, four 0297 -- FROM tenk1 WHERE unique1 < 10 WINDOW w AS (order by four); 0298 0299 -- [SPARK-28428] Spark `exclude` always expecting `()` 0300 -- SELECT sum(unique1) over (w range between unbounded preceding and current row exclude ties), 0301 -- unique1, four 0302 -- FROM tenk1 WHERE unique1 < 10 WINDOW w AS (order by four); 0303 0304 -- [SPARK-27951] ANSI SQL: NTH_VALUE function 0305 -- SELECT first_value(unique1) over w, 0306 -- nth_value(unique1, 2) over w AS nth_2, 0307 -- last_value(unique1) over w, unique1, four 0308 -- FROM tenk1 WHERE unique1 < 10 0309 -- WINDOW w AS (order by four range between current row and unbounded following); 0310 0311 -- [SPARK-28501] Frame bound value must be a literal. 0312 -- SELECT sum(unique1) over 0313 -- (order by unique1 0314 -- rows (SELECT unique1 FROM tenk1 ORDER BY unique1 LIMIT 1) + 1 PRECEDING), 0315 -- unique1 0316 -- FROM tenk1 WHERE unique1 < 10; 0317 0318 CREATE TEMP VIEW v_window AS 0319 SELECT i.id, sum(i.id) over (order by i.id rows between 1 preceding and 1 following) as sum_rows 0320 FROM range(1, 11) i; 0321 0322 SELECT * FROM v_window; 0323 0324 -- [SPARK-28428] Spark `exclude` always expecting `()` 0325 -- CREATE OR REPLACE TEMP VIEW v_window AS 0326 -- SELECT i, sum(i) over (order by i rows between 1 preceding and 1 following 0327 -- exclude current row) as sum_rows FROM range(1, 10) i; 0328 0329 -- SELECT * FROM v_window; 0330 0331 -- [SPARK-28428] Spark `exclude` always expecting `()` 0332 -- CREATE OR REPLACE TEMP VIEW v_window AS 0333 -- SELECT i, sum(i) over (order by i rows between 1 preceding and 1 following 0334 -- exclude group) as sum_rows FROM range(1, 10) i; 0335 -- SELECT * FROM v_window; 0336 0337 -- [SPARK-28428] Spark `exclude` always expecting `()` 0338 -- CREATE OR REPLACE TEMP VIEW v_window AS 0339 -- SELECT i, sum(i) over (order by i rows between 1 preceding and 1 following 0340 -- exclude ties) as sum_rows FROM generate_series(1, 10) i; 0341 0342 -- [SPARK-28428] Spark `exclude` always expecting `()` 0343 -- CREATE OR REPLACE TEMP VIEW v_window AS 0344 -- SELECT i, sum(i) over (order by i rows between 1 preceding and 1 following 0345 -- exclude no others) as sum_rows FROM generate_series(1, 10) i; 0346 -- SELECT * FROM v_window; 0347 0348 -- [SPARK-28648] Adds support to `groups` unit type in window clauses 0349 -- CREATE OR REPLACE TEMP VIEW v_window AS 0350 -- SELECT i.id, sum(i.id) over (order by i.id groups between 1 preceding and 1 following) as sum_rows FROM range(1, 11) i; 0351 -- SELECT * FROM v_window; 0352 0353 DROP VIEW v_window; 0354 -- [SPARK-29540] Thrift in some cases can't parse string to date 0355 -- DROP TABLE empsalary; 0356 DROP VIEW tenk2; 0357 DROP VIEW int4_tbl;
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |