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

88 lines
2.3 KiB
SQL

# name: test/sql/window/test_evil_window.test
# description: More evil cases
# group: [window]
statement ok
PRAGMA enable_verification
# negative lag
query II
select *
from (
select lag(i, -1) over () as negative, lead(i, 1) over () as positive
from generate_series(0, 10, 1) tbl(i)
) w
where negative <> positive
----
statement ok
CREATE TABLE empsalary (depname varchar, empno bigint, salary int, enroll_date date)
statement ok
INSERT INTO empsalary VALUES ('develop', 10, 5200, '2007-08-01'), ('sales', 1, 5000, '2006-10-01'), ('personnel', 5, 3500, '2007-12-10'), ('sales', 4, 4800, '2007-08-08'), ('personnel', 2, 3900, '2006-12-23'), ('develop', 7, 4200, '2008-01-01'), ('develop', 9, 4500, '2008-01-01'), ('sales', 3, 4800, '2007-08-01'), ('develop', 8, 6000, '2006-10-01'), ('develop', 11, 5200, '2007-08-15')
# aggr as input to window
query TR
SELECT depname, sum(sum(salary)) over (partition by depname order by salary) FROM empsalary group by depname, salary order by depname, salary
----
develop 4200.000000
develop 8700.000000
develop 19100.000000
develop 25100.000000
personnel 3500.000000
personnel 7400.000000
sales 9600.000000
sales 14600.000000
# expr in window
query IR
SELECT empno, sum(salary*2) OVER (PARTITION BY depname ORDER BY empno) FROM empsalary ORDER BY depname, empno
----
7 8400.000000
8 20400.000000
9 29400.000000
10 39800.000000
11 50200.000000
2 7800.000000
5 14800.000000
1 10000.000000
3 19600.000000
4 29200.000000
# expr ontop of window
query IR
SELECT empno, 2*sum(salary) OVER (PARTITION BY depname ORDER BY empno) FROM empsalary ORDER BY depname, empno
----
7 8400.000000
8 20400.000000
9 29400.000000
10 39800.000000
11 50200.000000
2 7800.000000
5 14800.000000
1 10000.000000
3 19600.000000
4 29200.000000
# tpcds-derived window
query TR
SELECT depname, sum(salary)*100.0000/sum(sum(salary)) OVER (PARTITION BY depname ORDER BY salary) AS revenueratio FROM empsalary GROUP BY depname, salary ORDER BY depname, revenueratio
----
develop 23.904382
develop 51.724138
develop 54.450262
develop 100.000000
personnel 52.702703
personnel 100.000000
sales 34.246575
sales 100.000000
statement ok
CREATE TABLE empty_unsorted(c0 VARCHAR);
statement ok
SELECT *
FROM empty_unsorted
WHERE(NOT(false = ANY([])))
ORDER BY(~((SUM(true) OVER() - SUM(true) OVER())::INT)) ASC;