xref: /sqlite-3.40.0/test/filter2.tcl (revision 16e12c57)
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