Files
email-tracker/external/duckdb/test/sql/window/test_window_wisconsin.test
2025-10-24 19:21:19 -05:00

321 lines
4.9 KiB
SQL

# name: test/sql/window/test_window_wisconsin.test
# description: Wisconsin-derived window test cases
# group: [window]
statement ok
SET default_null_order='nulls_first';
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE tenk1 (unique1 int4, unique2 int4, two int4, four int4, ten int4, twenty int4, hundred int4, thousand int4, twothousand int4, fivethous int4, tenthous int4, odd int4, even int4, stringu1 varchar, stringu2 varchar, string4 varchar)
statement ok
insert into tenk1 values (8800,0,0,0,0,0,0,800,800,3800,8800,0,1,'MAAAAA','AAAAAA','AAAAxx'), (1891,1,1,3,1,11,91,891,1891,1891,1891,182,183,'TUAAAA','BAAAAA','HHHHxx'), (3420,2,0,0,0,0,20,420,1420,3420,3420,40,41,'OBAAAA','CAAAAA','OOOOxx'), (9850,3,0,2,0,10,50,850,1850,4850,9850,100,101,'WOAAAA','DAAAAA','VVVVxx'), (7164,4,0,0,4,4,64,164,1164,2164,7164,128,129,'OPAAAA','EAAAAA','AAAAxx'), (8009,5,1,1,9,9,9,9,9,3009,8009,18,19,'BWAAAA','FAAAAA','HHHHxx'), (5057,6,1,1,7,17,57,57,1057,57,5057,114,115,'NMAAAA','GAAAAA','OOOOxx'), (6701,7,1,1,1,1,1,701,701,1701,6701,2,3,'TXAAAA','HAAAAA','VVVVxx'), (4321,8,1,1,1,1,21,321,321,4321,4321,42,43,'FKAAAA','IAAAAA','AAAAxx'), (3043,9,1,3,3,3,43,43,1043,3043,3043,86,87,'BNAAAA','JAAAAA','HHHHxx')
query I
SELECT COUNT(*) OVER () FROM tenk1
----
10
10
10
10
10
10
10
10
10
10
query RII
SELECT sum(four) OVER (PARTITION BY ten ORDER BY unique2) AS sum_1, ten, four FROM tenk1 WHERE unique2 < 10 order by ten, unique2
----
0.000000 0 0
0.000000 0 0
2.000000 0 2
3.000000 1 3
4.000000 1 1
5.000000 1 1
3.000000 3 3
0.000000 4 0
1.000000 7 1
1.000000 9 1
query I
SELECT row_number() OVER (ORDER BY unique2) rn FROM tenk1 WHERE unique2 < 10 ORDER BY rn
----
1
2
3
4
5
6
7
8
9
10
query III
SELECT rank() OVER (PARTITION BY four ORDER BY ten) AS rank_1, ten, four FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten
----
1 0 0
1 0 0
3 4 0
1 1 1
1 1 1
3 7 1
4 9 1
1 0 2
1 1 3
2 3 3
query I
SELECT dense_rank() OVER (PARTITION BY four ORDER BY ten) FROM tenk1 WHERE unique2 < 10 ORDER BY four, ten
----
1
1
2
1
1
2
3
1
1
2
query I
SELECT first_value(ten) OVER (PARTITION BY four ORDER BY ten) FROM tenk1 WHERE unique2 < 10 order by four, ten
----
0
0
0
1
1
1
1
0
1
1
# percent_rank
query I
SELECT cast(percent_rank() OVER (PARTITION BY four ORDER BY ten)*10 as INTEGER) FROM tenk1 ORDER BY four, ten
----
0
0
10
0
0
7
10
0
0
10
# cume_dist
query I
SELECT cast(cume_dist() OVER (PARTITION BY four ORDER BY ten)*10 as integer) FROM tenk1 WHERE unique2 < 10 order by four, ten
----
7
7
10
5
5
8
10
10
5
10
# ntile
query I
SELECT ntile(2) OVER (ORDER BY ten, four) nn FROM tenk1 ORDER BY ten, four, nn
----
1
1
1
1
1
2
2
2
2
2
query I
SELECT ntile(3) OVER (ORDER BY ten, four) nn FROM tenk1 ORDER BY ten, four, nn
----
1
1
1
1
2
2
2
3
3
3
query I
SELECT ntile(4) OVER (ORDER BY ten, four) nn FROM tenk1 ORDER BY ten, four, nn
----
1
1
1
2
2
2
3
3
4
4
query I
SELECT ntile(5) OVER (ORDER BY ten, four) nn FROM tenk1 ORDER BY ten, four, nn
----
1
1
2
2
3
3
4
4
5
5
# lead/lag
query I
SELECT lag(ten) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
NULL
0
0
NULL
1
1
7
NULL
NULL
1
query I
SELECT lead(ten) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
0
4
NULL
1
7
9
NULL
NULL
3
NULL
query I
SELECT lag(ten, four) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
0
0
4
NULL
1
1
7
NULL
NULL
NULL
query I
SELECT lag(ten, four, 0) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
0
0
4
0
1
1
7
0
0
0
statement error
SELECT lag(ten, four, 0, 0) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
<REGEX>:.*Parser Error.*Incorrect number of parameters.*
query I
SELECT lead(ten) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
0
4
NULL
1
7
9
NULL
NULL
3
NULL
query I
SELECT lead(ten * 2, 1) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
0
8
NULL
2
14
18
NULL
NULL
6
NULL
query I
SELECT lead(ten * 2, 1, -1) OVER (PARTITION BY four ORDER BY ten) lt FROM tenk1 order by four, ten, lt
----
0
8
-1
2
14
18
-1
-1
6
-1
# empty OVER clause
query IRIIII
SELECT COUNT(*) OVER w c, SUM(four) OVER w s, cast(AVG(ten) OVER w * 10 as integer) a, RANK() over w r, DENSE_RANK() over w dr, ROW_NUMBER() OVER w rn FROM tenk1 WINDOW w AS () ORDER BY rn
----
10 12.000000 26 1 1 1
10 12.000000 26 1 1 2
10 12.000000 26 1 1 3
10 12.000000 26 1 1 4
10 12.000000 26 1 1 5
10 12.000000 26 1 1 6
10 12.000000 26 1 1 7
10 12.000000 26 1 1 8
10 12.000000 26 1 1 9
10 12.000000 26 1 1 10
# no ordering but still a frame spec (somewhat underdefined)
query IRIIII
SELECT COUNT(*) OVER w c, SUM(four) OVER w s, cast(AVG(ten) OVER w * 10 as integer) a, RANK() over w r, DENSE_RANK() over w dr, ROW_NUMBER() OVER w rn FROM tenk1 WINDOW w AS (rows between 1 preceding and 1 following) ORDER BY rn
----
2 3 5 1 1 1
3 3 3 1 1 2
3 5 3 1 1 3
3 2 13 1 1 4
3 3 43 1 1 5
3 2 67 1 1 6
3 3 57 1 1 7
3 3 30 1 1 8
3 5 17 1 1 9
2 4 20 1 1 10