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