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

173 lines
3.0 KiB
SQL

# name: test/sql/window/test_empty_frames.test
# description: Empty aggregate frames
# group: [window]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE t1 (id INTEGER, ch CHAR(1)) ;
statement ok
INSERT INTO t1 VALUES (1, 'A');
statement ok
INSERT INTO t1 VALUES (2, 'B');
statement ok
INSERT INTO t1 VALUES (NULL, 'B');
#
# Original bug report
#
foreach agg count(*) count_star()
query II
SELECT id, ${agg} OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 0
2 1
NULL 0
endloop
#
# All zeroes
#
foreach agg approx_count_distinct count entropy
query II
SELECT id, ${agg}(id) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 0
2 0
NULL 0
endloop
#
# All NULLs
#
foreach agg any_value arbitrary avg bit_and bit_or bit_xor favg first fsum group_concat histogram kahan_sum kurtosis last listagg mad max mean median min mode product sem skewness stddev stddev_pop stddev_samp sum sumkahan var_pop var_samp variance
query II
SELECT id, ${agg}(id) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL
endloop
#
# Custom results
#
# Numeric parameter argument
foreach agg approx_quantile quantile quantile_cont quantile_disc reservoir_quantile
query II
SELECT id, ${agg}(id, 0.5) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL
endloop
# Mixed arguments
foreach agg arg_max arg_min argmax argmin max_by min_by
query II
SELECT id, ${agg}(id, ch) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL
endloop
foreach agg array_agg list
query II
SELECT id, ${agg}(id) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 [NULL]
NULL NULL
endloop
# Boolean argument
foreach agg bool_and bool_or
query II
SELECT id, ${agg}(id > 0) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL
endloop
# Two numeric arguments =>NULL
foreach agg corr covar_pop covar_samp regr_avgx regr_avgy regr_intercept regr_r2 regr_slope regr_sxx regr_sxy regr_syy
query II
SELECT id, ${agg}(id, id) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL
endloop
# Two numeric arguments => 0
foreach agg regr_count
query II
SELECT id, ${agg}(id, id) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 0
2 0
NULL 0
endloop
query II
SELECT id, string_agg(id, ' ') OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL
query II
SELECT id, bitstring_agg(id, 1, 3) OVER (PARTITION BY ch ORDER BY id ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING)
FROM t1
ORDER BY 1;
----
1 NULL
2 NULL
NULL NULL