xref: /sqlite-3.40.0/test/window4.tcl (revision 553948e5)
1b33487b0Sdan## 2018 May 19
26bc5c9e7Sdan#
36bc5c9e7Sdan# The author disclaims copyright to this source code.  In place of
46bc5c9e7Sdan# a legal notice, here is a blessing:
56bc5c9e7Sdan#
66bc5c9e7Sdan#    May you do good and not evil.
76bc5c9e7Sdan#    May you find forgiveness for yourself and forgive others.
86bc5c9e7Sdan#    May you share freely, never taking more than you give.
96bc5c9e7Sdan#
106bc5c9e7Sdan#***********************************************************************
116bc5c9e7Sdan#
126bc5c9e7Sdan
136bc5c9e7Sdansource [file join [file dirname $argv0] pg_common.tcl]
146bc5c9e7Sdan
156bc5c9e7Sdan#=========================================================================
166bc5c9e7Sdan
176bc5c9e7Sdanstart_test window4 "2018 June 04"
1867a9b8edSdanifcapable !windowfunc
196bc5c9e7Sdan
206bc5c9e7Sdanexecsql_test 1.0 {
216bc5c9e7Sdan  DROP TABLE IF EXISTS t3;
226bc5c9e7Sdan  CREATE TABLE t3(a TEXT PRIMARY KEY);
236bc5c9e7Sdan  INSERT INTO t3 VALUES('a'), ('b'), ('c'), ('d'), ('e');
246bc5c9e7Sdan  INSERT INTO t3 VALUES('f'), ('g'), ('h'), ('i'), ('j');
256bc5c9e7Sdan}
266bc5c9e7Sdan
276bc5c9e7Sdanfor {set i 1} {$i < 20} {incr i} {
286bc5c9e7Sdan  execsql_test 1.$i "SELECT a, ntile($i) OVER (ORDER BY a) FROM t3"
296bc5c9e7Sdan}
306bc5c9e7Sdan
31ec891fd4Sdanexecsql_test 2.0 {
32ec891fd4Sdan  DROP TABLE IF EXISTS t4;
33ec891fd4Sdan  CREATE TABLE t4(a INTEGER PRIMARY KEY, b TEXT, c INTEGER);
34ec891fd4Sdan  INSERT INTO t4 VALUES(1, 'A', 9);
35ec891fd4Sdan  INSERT INTO t4 VALUES(2, 'B', 3);
36ec891fd4Sdan  INSERT INTO t4 VALUES(3, 'C', 2);
37ec891fd4Sdan  INSERT INTO t4 VALUES(4, 'D', 10);
38ec891fd4Sdan  INSERT INTO t4 VALUES(5, 'E', 5);
39ec891fd4Sdan  INSERT INTO t4 VALUES(6, 'F', 1);
40ec891fd4Sdan  INSERT INTO t4 VALUES(7, 'G', 1);
41ec891fd4Sdan  INSERT INTO t4 VALUES(8, 'H', 2);
42ec891fd4Sdan  INSERT INTO t4 VALUES(9, 'I', 10);
43ec891fd4Sdan  INSERT INTO t4 VALUES(10, 'J', 4);
44ec891fd4Sdan}
45ec891fd4Sdan
46ec891fd4Sdanexecsql_test 2.1 {
47ec891fd4Sdan  SELECT a, nth_value(b, c) OVER (ORDER BY a) FROM t4
48ec891fd4Sdan}
49ec891fd4Sdan
50fe4e25a0Sdanexecsql_test 2.2.1 {
51fe4e25a0Sdan  SELECT a, lead(b) OVER (ORDER BY a) FROM t4
52fe4e25a0Sdan}
53fe4e25a0Sdanexecsql_test 2.2.2 {
54fe4e25a0Sdan  SELECT a, lead(b, 2) OVER (ORDER BY a) FROM t4
55fe4e25a0Sdan}
56fe4e25a0Sdanexecsql_test 2.2.3 {
57fe4e25a0Sdan  SELECT a, lead(b, 3, 'abc') OVER (ORDER BY a) FROM t4
58fe4e25a0Sdan}
59fe4e25a0Sdan
60fe4e25a0Sdanexecsql_test 2.3.1 {
61fe4e25a0Sdan  SELECT a, lag(b) OVER (ORDER BY a) FROM t4
62fe4e25a0Sdan}
63fe4e25a0Sdanexecsql_test 2.3.2 {
64fe4e25a0Sdan  SELECT a, lag(b, 2) OVER (ORDER BY a) FROM t4
65fe4e25a0Sdan}
66fe4e25a0Sdanexecsql_test 2.3.3 {
67fe4e25a0Sdan  SELECT a, lag(b, 3, 'abc') OVER (ORDER BY a) FROM t4
68fe4e25a0Sdan}
69fe4e25a0Sdan
7003854d2eSdanexecsql_test 2.4.1 {
7103854d2eSdan  SELECT string_agg(b, '.') OVER (
7203854d2eSdan    ORDER BY a ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
7303854d2eSdan  ) FROM t4
7403854d2eSdan}
7503854d2eSdan
76ec891fd4Sdanexecsql_test 3.0 {
77ec891fd4Sdan  DROP TABLE IF EXISTS t5;
78ec891fd4Sdan  CREATE TABLE t5(a INTEGER PRIMARY KEY, b TEXT, c TEXT, d INTEGER);
79ec891fd4Sdan  INSERT INTO t5 VALUES(1, 'A', 'one',   5);
80ec891fd4Sdan  INSERT INTO t5 VALUES(2, 'B', 'two',   4);
81ec891fd4Sdan  INSERT INTO t5 VALUES(3, 'A', 'three', 3);
82ec891fd4Sdan  INSERT INTO t5 VALUES(4, 'B', 'four',  2);
83ec891fd4Sdan  INSERT INTO t5 VALUES(5, 'A', 'five',  1);
84ec891fd4Sdan}
85ec891fd4Sdan
86ec891fd4Sdanexecsql_test 3.1 {
87ec891fd4Sdan  SELECT a, nth_value(c, d) OVER (ORDER BY b) FROM t5
88ec891fd4Sdan}
89ec891fd4Sdan
90ec891fd4Sdanexecsql_test 3.2 {
91ec891fd4Sdan  SELECT a, nth_value(c, d) OVER (PARTITION BY b ORDER BY a) FROM t5
92ec891fd4Sdan}
93ec891fd4Sdan
94e3bf632cSdanexecsql_test 3.3 {
95e3bf632cSdan  SELECT a, count(*) OVER abc, count(*) OVER def FROM t5
96e3bf632cSdan  WINDOW abc AS (ORDER BY a),
97e3bf632cSdan         def AS (ORDER BY a DESC)
98e3bf632cSdan  ORDER BY a;
99e3bf632cSdan}
100e3bf632cSdan
1018b98560dSdanexecsql_test 3.4 {
1028b98560dSdan  SELECT a, max(a) FILTER (WHERE (a%2)=0) OVER w FROM t5
1038b98560dSdan  WINDOW w AS (ORDER BY a)
1048b98560dSdan}
1058b98560dSdan
10626522d1cSdanexecsql_test 3.5.1 {
10726522d1cSdan  SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 2 PRECEDING)
10826522d1cSdan  FROM t5
10926522d1cSdan}
11026522d1cSdanexecsql_test 3.5.2 {
11126522d1cSdan  SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
11226522d1cSdan  FROM t5
11326522d1cSdan}
11426522d1cSdanexecsql_test 3.5.3 {
11526522d1cSdan  SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 PRECEDING AND 0 PRECEDING)
11626522d1cSdan  FROM t5
11726522d1cSdan}
11826522d1cSdan
11926522d1cSdanexecsql_test 3.6.1 {
12026522d1cSdan  SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 2 FOLLOWING AND 1 FOLLOWING)
12126522d1cSdan  FROM t5
12226522d1cSdan}
12326522d1cSdanexecsql_test 3.6.2 {
12426522d1cSdan  SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING)
12526522d1cSdan  FROM t5
12626522d1cSdan}
12726522d1cSdanexecsql_test 3.6.3 {
12826522d1cSdan  SELECT a, max(c) OVER (ORDER BY a ROWS BETWEEN 0 FOLLOWING AND 0 FOLLOWING)
12926522d1cSdan  FROM t5
13026522d1cSdan}
13126522d1cSdan
1329a94722dSdan==========
1339a94722dSdan
1347392569fSdanexecsql_test 4.0 {
1357392569fSdan  DROP TABLE IF EXISTS ttt;
1367392569fSdan  CREATE TABLE ttt(a INTEGER PRIMARY KEY, b INTEGER, c INTEGER);
1377392569fSdan  INSERT INTO ttt VALUES(1, 1, 1);
1387392569fSdan  INSERT INTO ttt VALUES(2, 2, 2);
1397392569fSdan  INSERT INTO ttt VALUES(3, 3, 3);
1407392569fSdan
1417392569fSdan  INSERT INTO ttt VALUES(4, 1, 2);
1427392569fSdan  INSERT INTO ttt VALUES(5, 2, 3);
1437392569fSdan  INSERT INTO ttt VALUES(6, 3, 4);
1447392569fSdan
1457392569fSdan  INSERT INTO ttt VALUES(7, 1, 3);
1467392569fSdan  INSERT INTO ttt VALUES(8, 2, 4);
1477392569fSdan  INSERT INTO ttt VALUES(9, 3, 5);
1487392569fSdan}
1497392569fSdan
1507392569fSdanexecsql_test 4.1 {
1517392569fSdan  SELECT max(c), max(b) OVER (ORDER BY b) FROM ttt GROUP BY b;
1527392569fSdan}
1537392569fSdan
154c0bb4459Sdanexecsql_test 4.2 {
155c0bb4459Sdan  SELECT max(b) OVER (ORDER BY max(c)) FROM ttt GROUP BY b;
156c0bb4459Sdan}
157c0bb4459Sdan
158c0bb4459Sdanexecsql_test 4.3 {
159c0bb4459Sdan  SELECT abs(max(b) OVER (ORDER BY b)) FROM ttt GROUP BY b;
160c0bb4459Sdan}
161c0bb4459Sdan
16213078caaSdanexecsql_test 4.4 {
16313078caaSdan  SELECT sum(b) OVER (
16413078caaSdan    ORDER BY a RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
16513078caaSdan  ) FROM ttt;
16613078caaSdan}
16713078caaSdan
1689a94722dSdanset lPart  [list "PARTITION BY b" "PARTITION BY b, a" "" "PARTITION BY a"]
1699a94722dSdanset lOrder [list "ORDER BY a" "ORDER BY a DESC" "" "ORDER BY b, a"]
1709a94722dSdanset lRange {
171303451a8Sdan    "RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW"
172303451a8Sdan    "RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING"
173303451a8Sdan    "RANGE BETWEEN CURRENT ROW AND CURRENT ROW"
174303451a8Sdan    "RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING"
175303451a8Sdan}
176303451a8Sdan
177303451a8Sdanset lRows {
178303451a8Sdan    "ROWS BETWEEN 3 PRECEDING AND 1 FOLLOWING"
179303451a8Sdan    "ROWS BETWEEN 3 PRECEDING AND 2 FOLLOWING"
180303451a8Sdan    "ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING"
181303451a8Sdan    "ROWS BETWEEN 0 PRECEDING AND 1 PRECEDING"
182303451a8Sdan    "ROWS BETWEEN 1 FOLLOWING AND 500 FOLLOWING"
1839a94722dSdan}
1849a94722dSdan
1859a94722dSdanset tn 1
1869a94722dSdanset SQL {
187303451a8Sdan  SELECT max(c) OVER ($p1 $o1 $r1),
188303451a8Sdan  min(c) OVER ($p2 $o2 $r2)
1899a94722dSdan  FROM ttt ORDER BY a
1909a94722dSdan}
1919a94722dSdanset SQL2 {
192303451a8Sdan  SELECT sum(c) OVER ($p1 $o1 $r1),
193303451a8Sdan         sum(c) OVER ($p2 $o2 $r2)
1949a94722dSdan  FROM ttt ORDER BY a
1959a94722dSdan}
1969a94722dSdan
1979a94722dSdanset o1 [lindex $lOrder 0]
1989a94722dSdanset o2 [lindex $lOrder 0]
1999a94722dSdanset r1 [lindex $lRange 0]
2009a94722dSdanset r2 [lindex $lRange 0]
2019a94722dSdanforeach p1 $lPart { foreach p2 $lPart {
2029a94722dSdan  execsql_test 4.5.$tn.1 [subst $SQL]
203303451a8Sdan  execsql_test 4.5.$tn.2 [subst $SQL2]
2049a94722dSdan  incr tn
2059a94722dSdan}}
2069a94722dSdan
2079a94722dSdanset o1 [lindex $lOrder 0]
2089a94722dSdanset o2 [lindex $lOrder 0]
2099a94722dSdanset p1 [lindex $lPart 0]
2109a94722dSdanset p2 [lindex $lPart 0]
2119a94722dSdanforeach r1 $lRange { foreach r2 $lRange {
2129a94722dSdan  execsql_test 4.5.$tn.1 [subst $SQL]
213303451a8Sdan  execsql_test 4.5.$tn.2 [subst $SQL2]
214303451a8Sdan  incr tn
215303451a8Sdan}}
216303451a8Sdanforeach r1 $lRows { foreach r2 $lRows {
217303451a8Sdan  execsql_test 4.5.$tn.1 [subst $SQL]
218303451a8Sdan  execsql_test 4.5.$tn.2 [subst $SQL2]
2199a94722dSdan  incr tn
2209a94722dSdan}}
2219a94722dSdan
2229a94722dSdanset r1 [lindex $lRange 0]
2239a94722dSdanset r2 [lindex $lRange 0]
2249a94722dSdanset p1 [lindex $lPart 0]
2259a94722dSdanset p2 [lindex $lPart 0]
2269a94722dSdanforeach o1 $lOrder { foreach o2 $lOrder {
2279a94722dSdan  execsql_test 4.5.$tn.1 [subst $SQL]
228303451a8Sdan  execsql_test 4.5.$tn.2 [subst $SQL2]
2299a94722dSdan  incr tn
2309a94722dSdan}}
2319a94722dSdan
232e0a5e20fSdan==========
233e0a5e20fSdan
234e0a5e20fSdanexecsql_test 7.0 {
235e0a5e20fSdan  DROP TABLE IF EXISTS t1;
236e0a5e20fSdan  CREATE TABLE t1(x INTEGER, y INTEGER);
237e0a5e20fSdan  INSERT INTO t1 VALUES(1, 2);
238e0a5e20fSdan  INSERT INTO t1 VALUES(3, 4);
239e0a5e20fSdan  INSERT INTO t1 VALUES(5, 6);
240e0a5e20fSdan  INSERT INTO t1 VALUES(7, 8);
241e0a5e20fSdan  INSERT INTO t1 VALUES(9, 10);
242e0a5e20fSdan}
243e0a5e20fSdan
244e0a5e20fSdanexecsql_test 7.1 {
245e0a5e20fSdan  SELECT lead(y) OVER win FROM t1
246e0a5e20fSdan  WINDOW win AS (ORDER BY x)
247e0a5e20fSdan}
248e0a5e20fSdan
249e0a5e20fSdanexecsql_test 7.2 {
250e0a5e20fSdan  SELECT lead(y, 2) OVER win FROM t1
251e0a5e20fSdan  WINDOW win AS (ORDER BY x)
252e0a5e20fSdan}
253e0a5e20fSdan
254e0a5e20fSdanexecsql_test 7.3 {
255e0a5e20fSdan  SELECT lead(y, 3, -1) OVER win FROM t1
256e0a5e20fSdan  WINDOW win AS (ORDER BY x)
257e0a5e20fSdan}
258e0a5e20fSdan
259e0a5e20fSdanexecsql_test 7.4 {
260e0a5e20fSdan  SELECT
261e0a5e20fSdan    lead(y) OVER win, lead(y) OVER win
262e0a5e20fSdan  FROM t1
263e0a5e20fSdan  WINDOW win AS (ORDER BY x)
264e0a5e20fSdan}
265e0a5e20fSdan
266e0a5e20fSdanexecsql_test 7.5 {
267e0a5e20fSdan  SELECT
268e0a5e20fSdan    lead(y) OVER win,
269e0a5e20fSdan    lead(y, 2) OVER win,
270e0a5e20fSdan    lead(y, 3, -1) OVER win
271e0a5e20fSdan  FROM t1
272e0a5e20fSdan  WINDOW win AS (ORDER BY x)
273e0a5e20fSdan}
274e0a5e20fSdan
2756fde1799Sdan==========
2766fde1799Sdan
2776fde1799Sdanexecsql_test 8.0 {
2786fde1799Sdan  DROP TABLE IF EXISTS t1;
2796fde1799Sdan  CREATE TABLE t1(a INTEGER, b INTEGER, c INTEGER, d INTEGER);
2806fde1799Sdan  INSERT INTO t1 VALUES(1, 2, 3, 4);
2816fde1799Sdan  INSERT INTO t1 VALUES(5, 6, 7, 8);
2826fde1799Sdan  INSERT INTO t1 VALUES(9, 10, 11, 12);
2836fde1799Sdan}
2846fde1799Sdan
2856fde1799Sdanexecsql_test 8.1 {
2866fde1799Sdan  SELECT row_number() OVER win,
2876fde1799Sdan         nth_value(d,2) OVER win,
2886fde1799Sdan         lead(d) OVER win
2896fde1799Sdan  FROM t1
2906fde1799Sdan  WINDOW win AS (ORDER BY a)
2916fde1799Sdan}
2926fde1799Sdan
2936fde1799Sdanexecsql_test 8.2 {
2946fde1799Sdan    SELECT row_number() OVER win,
2956fde1799Sdan           rank() OVER win,
2966fde1799Sdan           dense_rank() OVER win,
2976fde1799Sdan           ntile(2) OVER win,
2986fde1799Sdan           first_value(d) OVER win,
2996fde1799Sdan           last_value(d) OVER win,
3006fde1799Sdan           nth_value(d,2) OVER win,
3016fde1799Sdan           lead(d) OVER win,
3026fde1799Sdan           lag(d) OVER win,
3036fde1799Sdan           max(d) OVER win,
3046fde1799Sdan           min(d) OVER win
3056fde1799Sdan    FROM t1
3066fde1799Sdan    WINDOW win AS (ORDER BY a)
3076fde1799Sdan}
3088b98560dSdan
309b7306f6fSdan==========
310b7306f6fSdan
311b7306f6fSdanexecsql_test 9.0 {
312b7306f6fSdan  DROP TABLE IF EXISTS t2;
313b7306f6fSdan  CREATE TABLE t2(x INTEGER);
314b7306f6fSdan  INSERT INTO t2 VALUES(1), (1), (1), (4), (4), (6), (7);
315b7306f6fSdan}
316b7306f6fSdan
317b7306f6fSdanexecsql_test 9.1 {
318b7306f6fSdan  SELECT rank() OVER () FROM t2
319b7306f6fSdan}
320b7306f6fSdanexecsql_test 9.2 {
321b7306f6fSdan  SELECT dense_rank() OVER (PARTITION BY x) FROM t2
322b7306f6fSdan}
323b7306f6fSdanexecsql_float_test 9.3 {
324b7306f6fSdan  SELECT x, percent_rank() OVER (PARTITION BY x ORDER BY x) FROM t2
325b7306f6fSdan}
326b7306f6fSdan
327867be212Sdanexecsql_test 9.4 {
328867be212Sdan  SELECT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2
329867be212Sdan}
330867be212Sdan
331867be212Sdanexecsql_test 9.5 {
332867be212Sdan  SELECT DISTINCT x, rank() OVER (ORDER BY x) FROM t2 ORDER BY 1,2
333867be212Sdan}
334867be212Sdan
335cf0343b6Sdanexecsql_float_test 9.6 {
336cf0343b6Sdan  SELECT percent_rank() OVER () FROM t1
337cf0343b6Sdan}
338cf0343b6Sdan
339cf0343b6Sdanexecsql_float_test 9.7 {
340cf0343b6Sdan  SELECT cume_dist() OVER () FROM t1
341cf0343b6Sdan}
342cf0343b6Sdan
343d4fc49f7Sdanexecsql_test 10.0 {
344d4fc49f7Sdan  DROP TABLE IF EXISTS t7;
345d4fc49f7Sdan  CREATE TABLE t7(id INTEGER PRIMARY KEY, a INTEGER, b INTEGER);
346d4fc49f7Sdan  INSERT INTO t7(id, a, b) VALUES
347d4fc49f7Sdan    (1, 1, 2), (2, 1, NULL), (3, 1, 4),
348d4fc49f7Sdan    (4, 3, NULL), (5, 3, 8), (6, 3, 1);
349d4fc49f7Sdan}
350d4fc49f7Sdanexecsql_test 10.1 {
351d4fc49f7Sdan  SELECT id, min(b) OVER (PARTITION BY a ORDER BY id) FROM t7;
352d4fc49f7Sdan}
353d4fc49f7Sdan
354a1a7e112Sdanexecsql_test 10.2 {
355a1a7e112Sdan  SELECT id, lead(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7;
356a1a7e112Sdan}
357a1a7e112Sdanexecsql_test 10.3 {
358a1a7e112Sdan  SELECT id, lag(b, -1) OVER (PARTITION BY a ORDER BY id) FROM t7;
359a1a7e112Sdan}
360a1a7e112Sdan
3612fae1504Sdanexecsql_test 11.0 {
3622fae1504Sdan  DROP VIEW IF EXISTS v8;
3632fae1504Sdan  DROP TABLE IF EXISTS t8;
3642fae1504Sdan  CREATE TABLE t8(t INT, total INT);
3652fae1504Sdan  INSERT INTO t8 VALUES(0,2);
3662fae1504Sdan  INSERT INTO t8 VALUES(5,1);
3672fae1504Sdan  INSERT INTO t8 VALUES(10,1);
3682fae1504Sdan}
3692fae1504Sdan
3702fae1504Sdanexecsql_test 11.1 {
3712fae1504Sdan  SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8;
3722fae1504Sdan}
3732fae1504Sdan
3742fae1504Sdanexecsql_test 11.2 {
3752fae1504Sdan  CREATE VIEW v8 AS SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8;
3762fae1504Sdan}
3772fae1504Sdan
3782fae1504Sdanexecsql_test 11.3 {
3792fae1504Sdan  SELECT * FROM v8;
3802fae1504Sdan}
3812fae1504Sdan
3822fae1504Sdanexecsql_test 11.4 {
3832fae1504Sdan  SELECT * FROM (
3842fae1504Sdan    SELECT NTILE(256) OVER (ORDER BY total) - 1 AS nt FROM t8
3852fae1504Sdan  ) sub;
3862fae1504Sdan}
387a1a7e112Sdan
388*553948e5Sdanexecsql_test 11.5 {
389*553948e5Sdan  SELECT sum( min(t) ) OVER () FROM t8 GROUP BY total;
390*553948e5Sdan}
391*553948e5Sdanexecsql_test 11.5 {
392*553948e5Sdan  SELECT sum( max(t) ) OVER () FROM t8 GROUP BY total;
393*553948e5Sdan}
394*553948e5Sdan
395*553948e5Sdanexecsql_test 11.7 {
396*553948e5Sdan  SELECT sum( min(t) ) OVER () FROM t8;
397*553948e5Sdan}
398*553948e5Sdanexecsql_test 11.8 {
399*553948e5Sdan  SELECT sum( max(t) ) OVER () FROM t8;
400*553948e5Sdan}
401*553948e5Sdan
402b6299681Sdanexecsql_test 12.0 {
403b6299681Sdan  DROP TABLE IF EXISTS t2;
404b6299681Sdan  CREATE TABLE t2(a INTEGER);
405b6299681Sdan  INSERT INTO t2 VALUES(1), (2), (3);
406b6299681Sdan}
407b6299681Sdan
408b6299681Sdanexecsql_test 12.1 {
409b6299681Sdan  SELECT (SELECT min(a) OVER ()) FROM t2
410b6299681Sdan}
411b6299681Sdan
412b6299681Sdanexecsql_float_test 12.2 {
413b6299681Sdan  SELECT (SELECT avg(a)) FROM t2 ORDER BY 1
414b6299681Sdan}
415b6299681Sdan
416b6299681Sdanexecsql_float_test 12.3 {
417b6299681Sdan  SELECT
418b6299681Sdan    (SELECT avg(a) UNION SELECT min(a) OVER ())
419b6299681Sdan  FROM t2 GROUP BY a
420b6299681Sdan  ORDER BY 1
421b6299681Sdan}
422d4fc49f7Sdan
4236bc5c9e7Sdanfinish_test
424ec891fd4Sdan
425