16ba7ab0dSdan# 2018 May 19 26ba7ab0dSdan# 36ba7ab0dSdan# The author disclaims copyright to this source code. In place of 46ba7ab0dSdan# a legal notice, here is a blessing: 56ba7ab0dSdan# 66ba7ab0dSdan# May you do good and not evil. 76ba7ab0dSdan# May you find forgiveness for yourself and forgive others. 86ba7ab0dSdan# May you share freely, never taking more than you give. 96ba7ab0dSdan# 106ba7ab0dSdan#*********************************************************************** 116ba7ab0dSdan# 126ba7ab0dSdan 136ba7ab0dSdansource [file join [file dirname $argv0] pg_common.tcl] 146ba7ab0dSdan 156ba7ab0dSdan#========================================================================= 166ba7ab0dSdan 176ba7ab0dSdan 186ba7ab0dSdanstart_test filter2 "2019 July 2" 196ba7ab0dSdan 206ba7ab0dSdanifcapable !windowfunc 216ba7ab0dSdan 226ba7ab0dSdanexecsql_test 1.0 { 236ba7ab0dSdan DROP TABLE IF EXISTS t1; 246ba7ab0dSdan CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER); 256ba7ab0dSdan INSERT INTO t1 VALUES 266ba7ab0dSdan (1, 7), (2, 3), (3, 5), (4, 30), (5, 26), (6, 23), (7, 27), 276ba7ab0dSdan (8, 3), (9, 17), (10, 26), (11, 33), (12, 25), (13, NULL), (14, 47), 286ba7ab0dSdan (15, 36), (16, 13), (17, 45), (18, 31), (19, 11), (20, 36), (21, 37), 296ba7ab0dSdan (22, 21), (23, 22), (24, 14), (25, 16), (26, 3), (27, 7), (28, 29), 306ba7ab0dSdan (29, 50), (30, 38), (31, 3), (32, 36), (33, 12), (34, 4), (35, 46), 316ba7ab0dSdan (36, 3), (37, 48), (38, 23), (39, NULL), (40, 24), (41, 5), (42, 46), 326ba7ab0dSdan (43, 11), (44, NULL), (45, 18), (46, 25), (47, 15), (48, 18), (49, 23); 336ba7ab0dSdan} 346ba7ab0dSdan 356ba7ab0dSdanexecsql_test 1.1 { SELECT sum(b) FROM t1 } 366ba7ab0dSdan 376ba7ab0dSdanexecsql_test 1.2 { SELECT sum(b) FILTER (WHERE a<10) FROM t1 } 386ba7ab0dSdan 396ba7ab0dSdanexecsql_test 1.3 { SELECT count(DISTINCT b) FROM t1 } 406ba7ab0dSdan 416ba7ab0dSdanexecsql_test 1.4 { SELECT count(DISTINCT b) FILTER (WHERE a!=19) FROM t1 } 426ba7ab0dSdan 436ba7ab0dSdanexecsql_test 1.5 { 446ba7ab0dSdan SELECT min(b) FILTER (WHERE a>19), 456ba7ab0dSdan min(b) FILTER (WHERE a>0), 466ba7ab0dSdan max(a+b) FILTER (WHERE a>19), 476ba7ab0dSdan max(b+a) FILTER (WHERE a BETWEEN 10 AND 40) 486ba7ab0dSdan FROM t1; 496ba7ab0dSdan} 506ba7ab0dSdan 516ba7ab0dSdanexecsql_test 1.6 { 526ba7ab0dSdan SELECT min(b), 536ba7ab0dSdan min(b), 546ba7ab0dSdan max(a+b), 556ba7ab0dSdan max(b+a) 566ba7ab0dSdan FROM t1 576ba7ab0dSdan GROUP BY (a%10) 586ba7ab0dSdan ORDER BY 1, 2, 3, 4; 596ba7ab0dSdan} 606ba7ab0dSdan 616ba7ab0dSdanexecsql_test 1.7 { 626ba7ab0dSdan SELECT min(b) FILTER (WHERE a>19), 636ba7ab0dSdan min(b) FILTER (WHERE a>0), 646ba7ab0dSdan max(a+b) FILTER (WHERE a>19), 656ba7ab0dSdan max(b+a) FILTER (WHERE a BETWEEN 10 AND 40) 666ba7ab0dSdan FROM t1 676ba7ab0dSdan GROUP BY (a%10) 686ba7ab0dSdan ORDER BY 1, 2, 3, 4; 696ba7ab0dSdan} 706ba7ab0dSdan 71*16e12c57Sdanexecsql_test 1.8 { 72*16e12c57Sdan SELECT sum(a+b) FILTER (WHERE a=NULL) FROM t1 73*16e12c57Sdan} 74*16e12c57Sdan 75*16e12c57Sdanexecsql_test 1.9 { 76*16e12c57Sdan SELECT (a%5) FROM t1 GROUP BY (a%5) 77*16e12c57Sdan HAVING sum(b) FILTER (WHERE b<20) > 34 78*16e12c57Sdan ORDER BY 1 79*16e12c57Sdan} 80*16e12c57Sdan 81*16e12c57Sdanexecsql_test 1.10 { 82*16e12c57Sdan SELECT (a%5), sum(b) FILTER (WHERE b<20) AS bbb 83*16e12c57Sdan FROM t1 84*16e12c57Sdan GROUP BY (a%5) HAVING sum(b) FILTER (WHERE b<20) >34 85*16e12c57Sdan ORDER BY 1 86*16e12c57Sdan} 87*16e12c57Sdan 88*16e12c57Sdanexecsql_test 1.11 { 89*16e12c57Sdan SELECT (a%5), sum(b) FILTER (WHERE b<20) AS bbb 90*16e12c57Sdan FROM t1 91*16e12c57Sdan GROUP BY (a%5) HAVING sum(b) FILTER (WHERE b<20) >34 92*16e12c57Sdan ORDER BY 2 93*16e12c57Sdan} 94*16e12c57Sdan 95*16e12c57Sdanexecsql_test 1.12 { 96*16e12c57Sdan SELECT (a%5), 97*16e12c57Sdan sum(b) FILTER (WHERE b<20) AS bbb, 98*16e12c57Sdan count(distinct b) FILTER (WHERE b<20 OR a=13) AS ccc 99*16e12c57Sdan FROM t1 GROUP BY (a%5) 100*16e12c57Sdan ORDER BY 2 101*16e12c57Sdan} 102*16e12c57Sdan 103*16e12c57Sdanexecsql_test 1.13 { 104*16e12c57Sdan SELECT 105*16e12c57Sdan string_agg(CAST(b AS TEXT), '_') FILTER (WHERE b%2!=0), 106*16e12c57Sdan string_agg(CAST(b AS TEXT), '_') FILTER (WHERE b%2!=1), 107*16e12c57Sdan count(*) FILTER (WHERE b%2!=0), 108*16e12c57Sdan count(*) FILTER (WHERE b%2!=1) 109*16e12c57Sdan FROM t1; 110*16e12c57Sdan} 111*16e12c57Sdan 112*16e12c57Sdanexecsql_float_test 1.14 { 113*16e12c57Sdan SELECT 114*16e12c57Sdan avg(b) FILTER (WHERE b>a), 115*16e12c57Sdan avg(b) FILTER (WHERE b<a) 116*16e12c57Sdan FROM t1 GROUP BY (a%2) ORDER BY 1,2; 117*16e12c57Sdan} 118*16e12c57Sdan 119*16e12c57Sdanexecsql_test 1.15 { 120*16e12c57Sdan SELECT 121*16e12c57Sdan a/5, 122*16e12c57Sdan sum(b) FILTER (WHERE a%5=0), 123*16e12c57Sdan sum(b) FILTER (WHERE a%5=1), 124*16e12c57Sdan sum(b) FILTER (WHERE a%5=2), 125*16e12c57Sdan sum(b) FILTER (WHERE a%5=3), 126*16e12c57Sdan sum(b) FILTER (WHERE a%5=4) 127*16e12c57Sdan FROM t1 GROUP BY (a/5) ORDER BY 1; 128*16e12c57Sdan} 129*16e12c57Sdan 1306ba7ab0dSdanfinish_test 1316ba7ab0dSdan 1326ba7ab0dSdan 133