should be it
This commit is contained in:
177
external/duckdb/test/sql/window/test_mode_window.test
vendored
Normal file
177
external/duckdb/test/sql/window/test_mode_window.test
vendored
Normal file
@@ -0,0 +1,177 @@
|
||||
# name: test/sql/window/test_mode_window.test
|
||||
# description: Test MODE aggregate as a window function
|
||||
# group: [window]
|
||||
|
||||
statement ok
|
||||
SET default_null_order='nulls_first';
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
PRAGMA verify_external
|
||||
|
||||
statement ok
|
||||
create table modes as select range r from range(10) union all values (NULL), (NULL), (NULL);
|
||||
|
||||
query IIII
|
||||
SELECT r % 2, r, r//3, mode(r//3) over (partition by r % 2 order by r) FROM modes ORDER BY 1, 2
|
||||
----
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
0 0 0 0
|
||||
0 2 0 0
|
||||
0 4 1 0
|
||||
0 6 2 0
|
||||
0 8 2 0
|
||||
1 1 0 0
|
||||
1 3 1 0
|
||||
1 5 1 1
|
||||
1 7 2 1
|
||||
1 9 3 1
|
||||
|
||||
query III
|
||||
SELECT r, r//3, mode(r//3) over (order by r rows between 1 preceding and 1 following)
|
||||
FROM modes
|
||||
ORDER BY ALL
|
||||
----
|
||||
NULL NULL NULL
|
||||
NULL NULL NULL
|
||||
NULL NULL 0
|
||||
0 0 0
|
||||
1 0 0
|
||||
2 0 0
|
||||
3 1 1
|
||||
4 1 1
|
||||
5 1 1
|
||||
6 2 2
|
||||
7 2 2
|
||||
8 2 2
|
||||
9 3 2
|
||||
|
||||
query III
|
||||
SELECT r, r//3, mode(r//3) over (order by r rows between 1 preceding and 3 following) FROM modes ORDER BY 1, 2
|
||||
----
|
||||
NULL NULL 0
|
||||
NULL NULL 0
|
||||
NULL NULL 0
|
||||
0 0 0
|
||||
1 0 0
|
||||
2 0 1
|
||||
3 1 1
|
||||
4 1 1
|
||||
5 1 2
|
||||
6 2 2
|
||||
7 2 2
|
||||
8 2 2
|
||||
9 3 2
|
||||
|
||||
# Scattered NULLs
|
||||
query IIII
|
||||
SELECT r, r // 3, n, mode(n) over (partition by r % 3 order by r)
|
||||
FROM (SELECT r, CASE r % 2 WHEN 0 THEN r ELSE NULL END AS n FROM modes) nulls
|
||||
ORDER BY 1
|
||||
----
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
0 0 0 0
|
||||
1 0 NULL NULL
|
||||
2 0 2 2
|
||||
3 1 NULL 0
|
||||
4 1 4 4
|
||||
5 1 NULL 2
|
||||
6 2 6 0
|
||||
7 2 NULL 4
|
||||
8 2 8 2
|
||||
9 3 NULL 0
|
||||
|
||||
query III
|
||||
SELECT r, n, mode(n) over (order by r rows between 1 preceding and 1 following)
|
||||
FROM (SELECT r, CASE r % 2 WHEN 0 THEN r ELSE NULL END AS n FROM modes) nulls
|
||||
ORDER BY ALL
|
||||
----
|
||||
NULL NULL NULL
|
||||
NULL NULL NULL
|
||||
NULL NULL 0
|
||||
0 0 0
|
||||
1 NULL 0
|
||||
2 2 2
|
||||
3 NULL 2
|
||||
4 4 4
|
||||
5 NULL 4
|
||||
6 6 6
|
||||
7 NULL 6
|
||||
8 8 8
|
||||
9 NULL 8
|
||||
|
||||
query III
|
||||
SELECT r, n, mode(n) over (order by r rows between 1 preceding and 3 following)
|
||||
FROM (SELECT r, CASE r % 2 WHEN 0 THEN r ELSE NULL END AS n FROM modes) nulls
|
||||
ORDER BY 1
|
||||
----
|
||||
NULL NULL 0
|
||||
NULL NULL 0
|
||||
NULL NULL 0
|
||||
0 0 0
|
||||
1 NULL 0
|
||||
2 2 2
|
||||
3 NULL 2
|
||||
4 4 4
|
||||
5 NULL 4
|
||||
6 6 6
|
||||
7 NULL 6
|
||||
8 8 8
|
||||
9 NULL 8
|
||||
|
||||
query III
|
||||
SELECT r, n, mode(n) over (order by r rows between unbounded preceding and unbounded following)
|
||||
FROM (SELECT r, CASE r % 2 WHEN 0 THEN r ELSE NULL END AS n FROM modes) nulls
|
||||
ORDER BY 1
|
||||
----
|
||||
NULL NULL 0
|
||||
NULL NULL 0
|
||||
NULL NULL 0
|
||||
0 0 0
|
||||
1 NULL 0
|
||||
2 2 0
|
||||
3 NULL 0
|
||||
4 4 0
|
||||
5 NULL 0
|
||||
6 6 0
|
||||
7 NULL 0
|
||||
8 8 0
|
||||
9 NULL 0
|
||||
|
||||
#
|
||||
# Compare implementations
|
||||
#
|
||||
|
||||
foreach windowmode "window" "combine" "separate"
|
||||
|
||||
statement ok
|
||||
PRAGMA debug_window_mode=${windowmode}
|
||||
|
||||
query III
|
||||
WITH t(r) AS (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (NULL), (NULL), (NULL))
|
||||
SELECT r, r//3, mode(r//3) over (order by r rows between 1 preceding and 1 following)
|
||||
FROM t
|
||||
ORDER BY ALL
|
||||
----
|
||||
NULL NULL NULL
|
||||
NULL NULL NULL
|
||||
NULL NULL 0
|
||||
0 0 0
|
||||
1 0 0
|
||||
2 0 0
|
||||
3 1 1
|
||||
4 1 1
|
||||
5 1 1
|
||||
6 2 2
|
||||
7 2 2
|
||||
8 2 2
|
||||
9 3 2
|
||||
|
||||
endloop
|
||||
|
||||
Reference in New Issue
Block a user