Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
29b227c3
Commit
29b227c3
authored
Sep 22, 2016
by
Vicențiu Ciorbaru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup win testcase to always be deterministic
Also remove some whitespace
parent
09a8c795
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
404 additions
and
402 deletions
+404
-402
mysql-test/r/win.result
mysql-test/r/win.result
+195
-195
mysql-test/t/win.test
mysql-test/t/win.test
+209
-207
No files found.
mysql-test/r/win.result
View file @
29b227c3
...
@@ -4,7 +4,7 @@ drop view if exists v1;
...
@@ -4,7 +4,7 @@ drop view if exists v1;
# # Parser tests
# # Parser tests
# ########################################################################
# ########################################################################
#
#
# Check what happens when one attempts to use window function without OVER clause
# Check what happens when one attempts to use window function without OVER clause
create table t1 (a int, b int);
create table t1 (a int, b int);
insert into t1 values (1,1),(2,2);
insert into t1 values (1,1),(2,2);
select row_number() from t1;
select row_number() from t1;
...
@@ -44,15 +44,15 @@ a b x row_number() over (partition by a order by x)
...
@@ -44,15 +44,15 @@ a b x row_number() over (partition by a order by x)
3 20 vvv 1
3 20 vvv 1
drop table t1;
drop table t1;
create table t1 (pk int primary key, a int, b int);
create table t1 (pk int primary key, a int, b int);
insert into t1 values
insert into t1 values
(1, 10, 22),
(1, 10, 22),
(2, 11, 21),
(2, 11, 21),
(3, 12, 20),
(3, 12, 20),
(4, 13, 19),
(4, 13, 19),
(5, 14, 18);
(5, 14, 18);
select
select
pk, a, b,
pk, a, b,
row_number() over (order by a),
row_number() over (order by a),
row_number() over (order by b)
row_number() over (order by b)
from t1;
from t1;
pk a b row_number() over (order by a) row_number() over (order by b)
pk a b row_number() over (order by a) row_number() over (order by b)
...
@@ -66,7 +66,7 @@ drop table t1;
...
@@ -66,7 +66,7 @@ drop table t1;
# Try RANK() function
# Try RANK() function
#
#
create table t2 (
create table t2 (
pk int primary key,
pk int primary key,
a int
a int
);
);
insert into t2 values
insert into t2 values
...
@@ -83,27 +83,27 @@ insert into t2 values
...
@@ -83,27 +83,27 @@ insert into t2 values
select pk, a, rank() over (order by a) from t2;
select pk, a, rank() over (order by a) from t2;
pk a rank() over (order by a)
pk a rank() over (order by a)
1 0 1
1 0 1
10 4 9
2 0 1
2 0 1
3 1 3
3 1 3
4 1 3
4 1 3
8 2 5
5 2 5
5 2 5
6 2 5
6 2 5
7 2 5
7 2 5
8 2 5
9 4 9
9 4 9
10 4 9
select pk, a, rank() over (order by a desc) from t2;
select pk, a, rank() over (order by a desc) from t2;
pk a rank() over (order by a desc)
pk a rank() over (order by a desc)
1 0 9
1 0 9
10 4 1
2 0 9
2 0 9
3 1 7
3 1 7
4 1 7
4 1 7
8 2 3
5 2 3
5 2 3
6 2 3
6 2 3
7 2 3
7 2 3
8 2 3
9 4 1
9 4 1
10 4 1
drop table t2;
drop table t2;
#
#
# Try Aggregates as window functions. With frames.
# Try Aggregates as window functions. With frames.
...
@@ -125,9 +125,9 @@ pk c
...
@@ -125,9 +125,9 @@ pk c
8 2
8 2
9 2
9 2
10 2
10 2
select
select
pk, c,
pk, c,
count(*) over (partition by c order by pk
count(*) over (partition by c order by pk
rows between 2 preceding and 2 following) as CNT
rows between 2 preceding and 2 following) as CNT
from t1;
from t1;
pk c CNT
pk c CNT
...
@@ -141,9 +141,9 @@ pk c CNT
...
@@ -141,9 +141,9 @@ pk c CNT
8 2 5
8 2 5
9 2 4
9 2 4
10 2 3
10 2 3
select
select
pk, c,
pk, c,
count(*) over (partition by c order by pk
count(*) over (partition by c order by pk
rows between 1 preceding and 2 following) as CNT
rows between 1 preceding and 2 following) as CNT
from t1;
from t1;
pk c CNT
pk c CNT
...
@@ -158,9 +158,9 @@ pk c CNT
...
@@ -158,9 +158,9 @@ pk c CNT
9 2 3
9 2 3
10 2 2
10 2 2
select
select
pk, c,
pk, c,
count(*) over (partition by c order by pk
count(*) over (partition by c order by pk
rows between 2 preceding and current row) as CNT
rows between 2 preceding and current row) as CNT
from t1;
from t1;
pk c CNT
pk c CNT
1 1 1
1 1 1
...
@@ -173,8 +173,8 @@ pk c CNT
...
@@ -173,8 +173,8 @@ pk c CNT
8 2 3
8 2 3
9 2 3
9 2 3
10 2 3
10 2 3
select
select
pk,c,
pk,c,
count(*) over (partition by c order by pk rows
count(*) over (partition by c order by pk rows
between 1 following and 2 following) as CNT
between 1 following and 2 following) as CNT
from t1;
from t1;
...
@@ -189,8 +189,8 @@ pk c CNT
...
@@ -189,8 +189,8 @@ pk c CNT
8 2 2
8 2 2
9 2 1
9 2 1
10 2 0
10 2 0
select
select
pk,c,
pk,c,
count(*) over (partition by c order by pk rows
count(*) over (partition by c order by pk rows
between 2 preceding and 1 preceding) as CNT
between 2 preceding and 1 preceding) as CNT
from t1;
from t1;
...
@@ -206,9 +206,9 @@ pk c CNT
...
@@ -206,9 +206,9 @@ pk c CNT
9 2 2
9 2 2
10 2 2
10 2 2
select
select
pk, c,
pk, c,
count(*) over (partition by c order by pk
count(*) over (partition by c order by pk
rows between current row and 1 following) as CNT
rows between current row and 1 following) as CNT
from t1;
from t1;
pk c CNT
pk c CNT
1 1 2
1 1 2
...
@@ -222,8 +222,8 @@ pk c CNT
...
@@ -222,8 +222,8 @@ pk c CNT
9 2 2
9 2 2
10 2 1
10 2 1
# Check ORDER BY DESC
# Check ORDER BY DESC
select
select
pk, c,
pk, c,
count(*) over (partition by c order by pk desc
count(*) over (partition by c order by pk desc
rows between 2 preceding and 2 following) as CNT
rows between 2 preceding and 2 following) as CNT
from t1;
from t1;
...
@@ -259,11 +259,11 @@ pk c
...
@@ -259,11 +259,11 @@ pk c
8 2
8 2
9 2
9 2
10 2
10 2
select
select
pk, c,
pk, c,
count(*) over w1 as CNT
count(*) over w1 as CNT
from t1
from t1
window w1 as (partition by c order by pk
window w1 as (partition by c order by pk
rows between 2 preceding and 2 following);
rows between 2 preceding and 2 following);
pk c CNT
pk c CNT
1 1 3
1 1 3
...
@@ -276,8 +276,8 @@ pk c CNT
...
@@ -276,8 +276,8 @@ pk c CNT
8 2 5
8 2 5
9 2 4
9 2 4
10 2 3
10 2 3
select
select
pk, c,
pk, c,
count(*) over (w1 rows between 2 preceding and 2 following) as CNT
count(*) over (w1 rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c order by pk);
window w1 as (partition by c order by pk);
...
@@ -292,8 +292,8 @@ pk c CNT
...
@@ -292,8 +292,8 @@ pk c CNT
8 2 5
8 2 5
9 2 4
9 2 4
10 2 3
10 2 3
select
select
pk, c,
pk, c,
count(*) over (w1 order by pk rows between 2 preceding and 2 following) as CNT
count(*) over (w1 order by pk rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c);
window w1 as (partition by c);
...
@@ -308,8 +308,8 @@ pk c CNT
...
@@ -308,8 +308,8 @@ pk c CNT
8 2 5
8 2 5
9 2 4
9 2 4
10 2 3
10 2 3
select
select
pk, c,
pk, c,
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c), w2 as (w1 order by pk);
window w1 as (partition by c), w2 as (w1 order by pk);
...
@@ -324,12 +324,12 @@ pk c CNT
...
@@ -324,12 +324,12 @@ pk c CNT
8 2 5
8 2 5
9 2 4
9 2 4
10 2 3
10 2 3
select
select
pk, c,
pk, c,
count(*) over w3 as CNT
count(*) over w3 as CNT
from t1
from t1
window
window
w1 as (partition by c),
w1 as (partition by c),
w2 as (w1 order by pk),
w2 as (w1 order by pk),
w3 as (w2 rows between 2 preceding and 2 following);
w3 as (w2 rows between 2 preceding and 2 following);
pk c CNT
pk c CNT
...
@@ -343,141 +343,141 @@ pk c CNT
...
@@ -343,141 +343,141 @@ pk c CNT
8 2 5
8 2 5
9 2 4
9 2 4
10 2 3
10 2 3
select
select
pk, c,
pk, c,
count(*) over w as CNT
count(*) over w as CNT
from t1
from t1
window w1 as (partition by c order by pk
window w1 as (partition by c order by pk
rows between 2 preceding and 2 following);
rows between 2 preceding and 2 following);
ERROR HY000: Window specification with name 'w' is not defined
ERROR HY000: Window specification with name 'w' is not defined
select
select
pk, c,
pk, c,
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c), w1 as (order by pk);
window w1 as (partition by c), w1 as (order by pk);
ERROR HY000: Multiple window specifications with the same name 'w1'
ERROR HY000: Multiple window specifications with the same name 'w1'
select
select
pk, c,
pk, c,
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c), w2 as (w partition by c order by pk);
window w1 as (partition by c), w2 as (w partition by c order by pk);
ERROR HY000: Window specification with name 'w' is not defined
ERROR HY000: Window specification with name 'w' is not defined
select
select
pk, c,
pk, c,
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c), w2 as (w1 partition by c order by pk);
window w1 as (partition by c), w2 as (w1 partition by c order by pk);
ERROR HY000: Window specification referencing another one 'w1' cannot contain partition list
ERROR HY000: Window specification referencing another one 'w1' cannot contain partition list
select
select
pk, c,
pk, c,
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
count(*) over (w2 rows between 2 preceding and 2 following) as CNT
from t1
from t1
window w1 as (partition by c order by pk), w2 as (w1 order by pk);
window w1 as (partition by c order by pk), w2 as (w1 order by pk);
ERROR HY000: Referenced window specification 'w1' already contains order list
ERROR HY000: Referenced window specification 'w1' already contains order list
select
select
pk, c,
pk, c,
count(*) over w3 as CNT
count(*) over w3 as CNT
from t1
from t1
window
window
w1 as (partition by c),
w1 as (partition by c),
w2 as (w1 order by pk rows between 3 preceding and 2 following),
w2 as (w1 order by pk rows between 3 preceding and 2 following),
w3 as (w2 rows between 2 preceding and 2 following);
w3 as (w2 rows between 2 preceding and 2 following);
ERROR HY000: Referenced window specification 'w2' cannot contain window frame
ERROR HY000: Referenced window specification 'w2' cannot contain window frame
select
select
pk, c,
pk, c,
count(*) over w1 as CNT
count(*) over w1 as CNT
from t1
from t1
window w1 as (partition by c order by pk
window w1 as (partition by c order by pk
rows between unbounded following and 2 following);
rows between unbounded following and 2 following);
ERROR HY000: Unacceptable combination of window frame bound specifications
ERROR HY000: Unacceptable combination of window frame bound specifications
select
select
pk, c,
pk, c,
count(*) over (w1 rows between 2 preceding and unbounded preceding) as CNT
count(*) over (w1 rows between 2 preceding and unbounded preceding) as CNT
from t1
from t1
window w1 as (partition by c order by pk);
window w1 as (partition by c order by pk);
ERROR HY000: Unacceptable combination of window frame bound specifications
ERROR HY000: Unacceptable combination of window frame bound specifications
select
select
pk, c,
pk, c,
count(*) over (w1 order by pk rows between current row and 2 preceding) as CNT
count(*) over (w1 order by pk rows between current row and 2 preceding) as CNT
from t1
from t1
window w1 as (partition by c);
window w1 as (partition by c);
ERROR HY000: Unacceptable combination of window frame bound specifications
ERROR HY000: Unacceptable combination of window frame bound specifications
select
select
pk, c,
pk, c,
count(*) over (w2 rows between 2 following and current row) as CNT
count(*) over (w2 rows between 2 following and current row) as CNT
from t1
from t1
window w1 as (partition by c), w2 as (w1 order by pk);
window w1 as (partition by c), w2 as (w1 order by pk);
ERROR HY000: Unacceptable combination of window frame bound specifications
ERROR HY000: Unacceptable combination of window frame bound specifications
select
select
pk, c
pk, c
from t1 where rank() over w1 > 2
from t1 where rank() over w1 > 2
window w1 as (partition by c order by pk);
window w1 as (partition by c order by pk);
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
select
select
c, max(pk) as m
c, max(pk) as m
from t1
from t1
group by c + rank() over w1
group by c + rank() over w1
window w1 as (order by m);
window w1 as (order by m);
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
select
select
c, max(pk) as m, rank() over w1 as r
c, max(pk) as m, rank() over w1 as r
from t1
from t1
group by c+r
group by c+r
window w1 as (order by m);
window w1 as (order by m);
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
select
select
c, max(pk) as m, rank() over w1 as r
c, max(pk) as m, rank() over w1 as r
from t1
from t1
group by c having c+r > 3
group by c having c+r > 3
window w1 as (order by m);
window w1 as (order by m);
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
ERROR HY000: Window function is allowed only in SELECT list and ORDER BY clause
select
select
c, max(pk) as m, rank() over w1 as r,
c, max(pk) as m, rank() over w1 as r,
rank() over (partition by r+1 order by m)
rank() over (partition by r+1 order by m)
from t1
from t1
group by c
group by c
window w1 as (order by m);
window w1 as (order by m);
ERROR HY000: Window function is not allowed in window specification
ERROR HY000: Window function is not allowed in window specification
select
select
c, max(pk) as m, rank() over w1 as r,
c, max(pk) as m, rank() over w1 as r,
rank() over (partition by m order by r)
rank() over (partition by m order by r)
from t1
from t1
group by c
group by c
window w1 as (order by m);
window w1 as (order by m);
ERROR HY000: Window function is not allowed in window specification
ERROR HY000: Window function is not allowed in window specification
select
select
c, max(pk) as m, rank() over w1 as r, dense_rank() over w2 as dr
c, max(pk) as m, rank() over w1 as r, dense_rank() over w2 as dr
from t1
from t1
group by c
group by c
window w1 as (order by m), w2 as (partition by r order by m);
window w1 as (order by m), w2 as (partition by r order by m);
ERROR HY000: Window function is not allowed in window specification
ERROR HY000: Window function is not allowed in window specification
select
select
pk, c,
pk, c,
row_number() over (partition by c order by pk
row_number() over (partition by c order by pk
range between unbounded preceding and current row) as r
range between unbounded preceding and current row) as r
from t1;
from t1;
ERROR HY000: Window frame is not allowed with 'row_number('
ERROR HY000: Window frame is not allowed with 'row_number('
select
select
pk, c,
pk, c,
rank() over w1 as r
rank() over w1 as r
from t1
from t1
window w1 as (partition by c order by pk
window w1 as (partition by c order by pk
rows between 2 preceding and 2 following);
rows between 2 preceding and 2 following);
ERROR HY000: Window frame is not allowed with 'rank'
ERROR HY000: Window frame is not allowed with 'rank'
select
select
pk, c,
pk, c,
dense_rank() over (partition by c order by pk
dense_rank() over (partition by c order by pk
rows between 1 preceding and 1 following) as r
rows between 1 preceding and 1 following) as r
from t1;
from t1;
ERROR HY000: Window frame is not allowed with 'dense_rank'
ERROR HY000: Window frame is not allowed with 'dense_rank'
select
select
pk, c,
pk, c,
rank() over w1 as r
rank() over w1 as r
from t1
from t1
window w1 as (partition by c);
window w1 as (partition by c);
ERROR HY000: No order list in window specification for 'rank'
ERROR HY000: No order list in window specification for 'rank'
select
select
pk, c,
pk, c,
dense_rank() over (partition by c) as r
dense_rank() over (partition by c) as r
from t1;
from t1;
ERROR HY000: No order list in window specification for 'dense_rank'
ERROR HY000: No order list in window specification for 'dense_rank'
...
@@ -488,7 +488,7 @@ drop table t0,t1;
...
@@ -488,7 +488,7 @@ drop table t0,t1;
create table t0 (a int);
create table t0 (a int);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t2 (part_id int, pk int, a int);
create table t2 (part_id int, pk int, a int);
insert into t2 select
insert into t2 select
if(a<5, 0, 1), a, if(a<5, NULL, 1) from t0;
if(a<5, 0, 1), a, if(a<5, NULL, 1) from t0;
select * from t2;
select * from t2;
part_id pk a
part_id pk a
...
@@ -502,7 +502,7 @@ part_id pk a
...
@@ -502,7 +502,7 @@ part_id pk a
1 7 1
1 7 1
1 8 1
1 8 1
1 9 1
1 9 1
select
select
part_id, pk, a,
part_id, pk, a,
count(a) over (partition by part_id order by pk
count(a) over (partition by part_id order by pk
rows between 1 preceding and 1 following) as CNT
rows between 1 preceding and 1 following) as CNT
...
@@ -520,10 +520,10 @@ part_id pk a CNT
...
@@ -520,10 +520,10 @@ part_id pk a CNT
1 9 1 2
1 9 1 2
drop table t0, t2;
drop table t0, t2;
#
#
# RANGE-type bounds
# RANGE-type bounds
#
#
create table t3 (
create table t3 (
pk int,
pk int,
val int
val int
);
);
insert into t3 values
insert into t3 values
...
@@ -534,12 +534,12 @@ insert into t3 values
...
@@ -534,12 +534,12 @@ insert into t3 values
(4, 2),
(4, 2),
(5, 2),
(5, 2),
(6, 2);
(6, 2);
select
select
pk,
pk,
val,
val,
count(val) over (order by val
count(val) over (order by val
range between current row and
range between current row and
current row)
current row)
as CNT
as CNT
from t3;
from t3;
pk val CNT
pk val CNT
...
@@ -550,15 +550,15 @@ pk val CNT
...
@@ -550,15 +550,15 @@ pk val CNT
4 2 4
4 2 4
5 2 4
5 2 4
6 2 4
6 2 4
insert into t3 values
insert into t3 values
(7, 3),
(7, 3),
(8, 3);
(8, 3);
select
select
pk,
pk,
val,
val,
count(val) over (order by val
count(val) over (order by val
range between current row and
range between current row and
current row)
current row)
as CNT
as CNT
from t3;
from t3;
pk val CNT
pk val CNT
...
@@ -597,14 +597,14 @@ insert into t4 values
...
@@ -597,14 +597,14 @@ insert into t4 values
(5678, 206, 2),
(5678, 206, 2),
(5678, 207, 3),
(5678, 207, 3),
(5678, 208, 3);
(5678, 208, 3);
select
select
part_id,
part_id,
pk,
pk,
val,
val,
count(val) over (partition by part_id
count(val) over (partition by part_id
order by val
order by val
range between current row and
range between current row and
current row)
current row)
as CNT
as CNT
from t4;
from t4;
part_id pk val CNT
part_id pk val CNT
...
@@ -629,14 +629,14 @@ part_id pk val CNT
...
@@ -629,14 +629,14 @@ part_id pk val CNT
#
#
# Try RANGE UNBOUNDED PRECEDING | FOLLOWING
# Try RANGE UNBOUNDED PRECEDING | FOLLOWING
#
#
select
select
part_id,
part_id,
pk,
pk,
val,
val,
count(val) over (partition by part_id
count(val) over (partition by part_id
order by val
order by val
range between unbounded preceding and
range between unbounded preceding and
current row)
current row)
as CNT
as CNT
from t4;
from t4;
part_id pk val CNT
part_id pk val CNT
...
@@ -658,14 +658,14 @@ part_id pk val CNT
...
@@ -658,14 +658,14 @@ part_id pk val CNT
5678 206 2 7
5678 206 2 7
5678 207 3 9
5678 207 3 9
5678 208 3 9
5678 208 3 9
select
select
part_id,
part_id,
pk,
pk,
val,
val,
count(val) over (partition by part_id
count(val) over (partition by part_id
order by val
order by val
range between current row and
range between current row and
unbounded following)
unbounded following)
as CNT
as CNT
from t4;
from t4;
part_id pk val CNT
part_id pk val CNT
...
@@ -687,14 +687,14 @@ part_id pk val CNT
...
@@ -687,14 +687,14 @@ part_id pk val CNT
5678 206 2 6
5678 206 2 6
5678 207 3 2
5678 207 3 2
5678 208 3 2
5678 208 3 2
select
select
part_id,
part_id,
pk,
pk,
val,
val,
count(val) over (partition by part_id
count(val) over (partition by part_id
order by val
order by val
range between unbounded preceding and
range between unbounded preceding and
unbounded following)
unbounded following)
as CNT
as CNT
from t4;
from t4;
part_id pk val CNT
part_id pk val CNT
...
@@ -742,7 +742,7 @@ pk a b bit_or
...
@@ -742,7 +742,7 @@ pk a b bit_or
6 2 64 224
6 2 64 224
7 2 128 208
7 2 128 208
8 2 16 144
8 2 16 144
# Extra ROWS n PRECEDING tests
# Extra ROWS n PRECEDING tests
select pk, a, b,
select pk, a, b,
bit_or(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) as bit_or
bit_or(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) as bit_or
from t1;
from t1;
...
@@ -757,8 +757,8 @@ pk a b bit_or
...
@@ -757,8 +757,8 @@ pk a b bit_or
8 2 16 128
8 2 16 128
drop table t1;
drop table t1;
create table t2 (
create table t2 (
pk int,
pk int,
a int,
a int,
b int
b int
);
);
insert into t2 values
insert into t2 values
...
@@ -822,7 +822,7 @@ pk a b bit_or
...
@@ -822,7 +822,7 @@ pk a b bit_or
10 2 512 256
10 2 512 256
11 2 1024 768
11 2 1024 768
12 2 2048 1536
12 2 2048 1536
# Check CURRENT ROW
# Check CURRENT ROW
select pk, a, b,
select pk, a, b,
bit_or(b) over (partition by a order by pk ROWS BETWEEN CURRENT ROW AND CURRENT ROW) as bit_or
bit_or(b) over (partition by a order by pk ROWS BETWEEN CURRENT ROW AND CURRENT ROW) as bit_or
from t2;
from t2;
...
@@ -848,12 +848,12 @@ part_id int,
...
@@ -848,12 +848,12 @@ part_id int,
pk int,
pk int,
a int
a int
);
);
insert into t1 values
insert into t1 values
(10, 1, 1),
(10, 1, 1),
(10, 2, 2),
(10, 2, 2),
(10, 3, 4),
(10, 3, 4),
(10, 4, 8),
(10, 4, 8),
(10, 5,26),
(10, 5,26),
(10, 6,27),
(10, 6,27),
(10, 7,40),
(10, 7,40),
(10, 8,71),
(10, 8,71),
...
@@ -861,7 +861,7 @@ insert into t1 values
...
@@ -861,7 +861,7 @@ insert into t1 values
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a
count(a) over (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 10 FOLLOWING) as cnt
AND 10 FOLLOWING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -877,7 +877,7 @@ pk a cnt
...
@@ -877,7 +877,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a DESC
count(a) over (ORDER BY a DESC
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 10 FOLLOWING) as cnt
AND 10 FOLLOWING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -893,7 +893,7 @@ pk a cnt
...
@@ -893,7 +893,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a
count(a) over (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 1 FOLLOWING) as cnt
AND 1 FOLLOWING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -909,7 +909,7 @@ pk a cnt
...
@@ -909,7 +909,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a
count(a) over (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 10 PRECEDING) as cnt
AND 10 PRECEDING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -925,7 +925,7 @@ pk a cnt
...
@@ -925,7 +925,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a DESC
count(a) over (ORDER BY a DESC
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 10 PRECEDING) as cnt
AND 10 PRECEDING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -941,7 +941,7 @@ pk a cnt
...
@@ -941,7 +941,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a
count(a) over (ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING) as cnt
AND 1 PRECEDING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -957,7 +957,7 @@ pk a cnt
...
@@ -957,7 +957,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a
count(a) over (ORDER BY a
RANGE BETWEEN 1 PRECEDING
RANGE BETWEEN 1 PRECEDING
AND CURRENT ROW) as cnt
AND CURRENT ROW) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -973,7 +973,7 @@ pk a cnt
...
@@ -973,7 +973,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a DESC
count(a) over (ORDER BY a DESC
RANGE BETWEEN 1 PRECEDING
RANGE BETWEEN 1 PRECEDING
AND CURRENT ROW) as cnt
AND CURRENT ROW) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -989,7 +989,7 @@ pk a cnt
...
@@ -989,7 +989,7 @@ pk a cnt
select
select
pk, a,
pk, a,
count(a) over (ORDER BY a
count(a) over (ORDER BY a
RANGE BETWEEN 1 FOLLOWING
RANGE BETWEEN 1 FOLLOWING
AND 3 FOLLOWING) as cnt
AND 3 FOLLOWING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -1040,7 +1040,7 @@ select
...
@@ -1040,7 +1040,7 @@ select
part_id, pk, a,
part_id, pk, a,
count(a) over (PARTITION BY part_id
count(a) over (PARTITION BY part_id
ORDER BY a
ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 10 FOLLOWING) as cnt
AND 10 FOLLOWING) as cnt
from t1;
from t1;
part_id pk a cnt
part_id pk a cnt
...
@@ -1066,7 +1066,7 @@ select
...
@@ -1066,7 +1066,7 @@ select
pk, a,
pk, a,
count(a) over (PARTITION BY part_id
count(a) over (PARTITION BY part_id
ORDER BY a
ORDER BY a
RANGE BETWEEN UNBOUNDED PRECEDING
RANGE BETWEEN UNBOUNDED PRECEDING
AND 1 PRECEDING) as cnt
AND 1 PRECEDING) as cnt
from t1;
from t1;
pk a cnt
pk a cnt
...
@@ -1101,13 +1101,13 @@ insert into t1 values (1, 1.21);
...
@@ -1101,13 +1101,13 @@ insert into t1 values (1, 1.21);
insert into t1 values (1, 1.22);
insert into t1 values (1, 1.22);
insert into t1 values (1, 3.33);
insert into t1 values (1, 3.33);
select
select
a,
a,
count(col1) over (order by a
count(col1) over (order by a
range between 0.1 preceding
range between 0.1 preceding
and 0.1 following)
and 0.1 following)
from t1;
from t1;
a count(col1) over (order by a
a count(col1) over (order by a
range between 0.1 preceding
range between 0.1 preceding
and 0.1 following)
and 0.1 following)
0.450 3
0.450 3
0.500 3
0.500 3
...
@@ -1116,9 +1116,9 @@ and 0.1 following)
...
@@ -1116,9 +1116,9 @@ and 0.1 following)
1.220 2
1.220 2
3.330 1
3.330 1
drop table t1;
drop table t1;
#
#
# RANGE-type frames and NULL values
# RANGE-type frames and NULL values
#
#
create table t1 (
create table t1 (
pk int,
pk int,
a int,
a int,
...
@@ -1132,10 +1132,10 @@ insert into t1 values (5, 11 ,1);
...
@@ -1132,10 +1132,10 @@ insert into t1 values (5, 11 ,1);
insert into t1 values (6, 12 ,1);
insert into t1 values (6, 12 ,1);
insert into t1 values (7, 13 ,1);
insert into t1 values (7, 13 ,1);
insert into t1 values (8, 14 ,1);
insert into t1 values (8, 14 ,1);
select
select
pk, a,
pk, a,
count(b) over (order by a
count(b) over (order by a
range between 2 preceding
range between 2 preceding
and 2 following) as CNT
and 2 following) as CNT
from t1;
from t1;
pk a CNT
pk a CNT
...
@@ -1148,9 +1148,9 @@ pk a CNT
...
@@ -1148,9 +1148,9 @@ pk a CNT
7 13 4
7 13 4
8 14 3
8 14 3
drop table t1;
drop table t1;
#
#
# Try ranges that have bound1 > bound2. The standard actually allows them
# Try ranges that have bound1 > bound2. The standard actually allows them
#
#
create table t0 (a int);
create table t0 (a int);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t1 (pk int, c int);
create table t1 (pk int, c int);
...
@@ -1173,7 +1173,7 @@ pk, c,
...
@@ -1173,7 +1173,7 @@ pk, c,
count(*) over (partition by c
count(*) over (partition by c
order by pk
order by pk
rows between 1 preceding
rows between 1 preceding
and 2 preceding)
and 2 preceding)
as cnt
as cnt
from t1;
from t1;
pk c cnt
pk c cnt
...
@@ -1230,7 +1230,7 @@ pk, c,
...
@@ -1230,7 +1230,7 @@ pk, c,
count(*) over (partition by c
count(*) over (partition by c
order by pk
order by pk
range between 1 preceding
range between 1 preceding
and 2 preceding)
and 2 preceding)
as cnt
as cnt
from t1;
from t1;
pk c cnt
pk c cnt
...
@@ -1251,7 +1251,7 @@ drop table t0, t1;
...
@@ -1251,7 +1251,7 @@ drop table t0, t1;
create table t1 (a int, b int, c varchar(32));
create table t1 (a int, b int, c varchar(32));
insert into t1 values (1,1,'foo');
insert into t1 values (1,1,'foo');
insert into t1 values (2,2,'bar');
insert into t1 values (2,2,'bar');
select
select
count(*) over (order by a,b
count(*) over (order by a,b
range between unbounded preceding and current row)
range between unbounded preceding and current row)
from t1;
from t1;
...
@@ -1283,7 +1283,7 @@ rows between current row and 3.14 following)
...
@@ -1283,7 +1283,7 @@ rows between current row and 3.14 following)
from t1;
from t1;
ERROR HY000: Integer is required for ROWS-type frame
ERROR HY000: Integer is required for ROWS-type frame
#
#
# EXCLUDE clause is parsed but not supported
# EXCLUDE clause is parsed but not supported
#
#
select
select
count(*) over (order by a
count(*) over (order by a
...
@@ -1314,9 +1314,9 @@ exclude no others)
...
@@ -1314,9 +1314,9 @@ exclude no others)
2
2
2
2
drop table t1;
drop table t1;
#
#
# Window function in grouping query
# Window function in grouping query
#
#
create table t1 (
create table t1 (
username varchar(32),
username varchar(32),
amount int
amount int
...
@@ -1328,9 +1328,9 @@ insert into t1 values
...
@@ -1328,9 +1328,9 @@ insert into t1 values
('user2',10),
('user2',10),
('user2',20),
('user2',20),
('user2',30);
('user2',30);
select
select
username,
username,
sum(amount) as s,
sum(amount) as s,
rank() over (order by s desc)
rank() over (order by s desc)
from t1
from t1
group by username;
group by username;
...
@@ -1338,9 +1338,9 @@ username s rank() over (order by s desc)
...
@@ -1338,9 +1338,9 @@ username s rank() over (order by s desc)
user1 9 2
user1 9 2
user2 60 1
user2 60 1
drop table t1;
drop table t1;
#
#
# mdev-9719: Window function in prepared statement
# mdev-9719: Window function in prepared statement
#
#
create table t1(a int, b int, x char(32));
create table t1(a int, b int, x char(32));
insert into t1 values (2, 10, 'xx');
insert into t1 values (2, 10, 'xx');
insert into t1 values (2, 10, 'zz');
insert into t1 values (2, 10, 'zz');
...
@@ -1356,9 +1356,9 @@ a row_number() over (partition by a order by b)
...
@@ -1356,9 +1356,9 @@ a row_number() over (partition by a order by b)
3 1
3 1
3 2
3 2
drop table t1;
drop table t1;
#
#
# mdev-9754: Window name resolution in prepared statement
# mdev-9754: Window name resolution in prepared statement
#
#
create table t0 (a int);
create table t0 (a int);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
create table t1 (pk int, c int);
create table t1 (pk int, c int);
...
@@ -1376,12 +1376,12 @@ pk c
...
@@ -1376,12 +1376,12 @@ pk c
8 2
8 2
9 2
9 2
10 2
10 2
prepare stmt from
prepare stmt from
'select
'select
pk, c,
pk, c,
count(*) over w1 as CNT
count(*) over w1 as CNT
from t1
from t1
window w1 as (partition by c order by pk
window w1 as (partition by c order by pk
rows between 2 preceding and 2 following)';
rows between 2 preceding and 2 following)';
execute stmt;
execute stmt;
pk c CNT
pk c CNT
...
@@ -1560,10 +1560,10 @@ insert into t1 values
...
@@ -1560,10 +1560,10 @@ insert into t1 values
select sum(b) over (partition by a order by b,pk
select sum(b) over (partition by a order by b,pk
rows between unbounded preceding and current row) as c1,
rows between unbounded preceding and current row) as c1,
avg(b) over (w1 rows between 1 preceding and 1 following) as c2,
avg(b) over (w1 rows between 1 preceding and 1 following) as c2,
sum(c) over (w2 rows between 1 preceding and 1 following) as c5,
sum(c) over (w2 rows between 1 preceding and 1 following) as c5,
avg(b) over (w1 rows between 5 preceding and 5 following) as c3,
avg(b) over (w1 rows between 5 preceding and 5 following) as c3,
sum(b) over (w1 rows between 1 preceding and 1 following) as c4
sum(b) over (w1 rows between 1 preceding and 1 following) as c4
from t1
from t1
window w1 as (partition by a order by b,pk),
window w1 as (partition by a order by b,pk),
w2 as (partition by b order by c,pk);
w2 as (partition by b order by c,pk);
c1 c2 c5 c3 c4
c1 c2 c5 c3 c4
...
@@ -1599,13 +1599,13 @@ drop table t1;
...
@@ -1599,13 +1599,13 @@ drop table t1;
# MDEV-9848: Window functions: reuse sorting and/or scanning
# MDEV-9848: Window functions: reuse sorting and/or scanning
#
#
create table t1 (a int, b int, c int);
create table t1 (a int, b int, c int);
insert into t1 values
insert into t1 values
(1,3,1),
(1,3,1),
(2,2,1),
(2,2,1),
(3,1,1);
(3,1,1);
# Check using counters
# Check using counters
flush status;
flush status;
select
select
rank() over (partition by c order by a),
rank() over (partition by c order by a),
rank() over (partition by c order by b)
rank() over (partition by c order by b)
from t1;
from t1;
...
@@ -1621,7 +1621,7 @@ Sort_range 0
...
@@ -1621,7 +1621,7 @@ Sort_range 0
Sort_rows 6
Sort_rows 6
Sort_scan 2
Sort_scan 2
flush status;
flush status;
select
select
rank() over (partition by c order by a),
rank() over (partition by c order by a),
rank() over (partition by c order by a)
rank() over (partition by c order by a)
from t1;
from t1;
...
@@ -1637,7 +1637,7 @@ Sort_range 0
...
@@ -1637,7 +1637,7 @@ Sort_range 0
Sort_rows 3
Sort_rows 3
Sort_scan 1
Sort_scan 1
explain format=json
explain format=json
select
select
rank() over (partition by c order by a),
rank() over (partition by c order by a),
rank() over (partition by c order by a)
rank() over (partition by c order by a)
from t1;
from t1;
...
@@ -1663,7 +1663,7 @@ EXPLAIN
...
@@ -1663,7 +1663,7 @@ EXPLAIN
}
}
}
}
explain format=json
explain format=json
select
select
rank() over (order by a),
rank() over (order by a),
row_number() over (order by a)
row_number() over (order by a)
from t1;
from t1;
...
@@ -1689,7 +1689,7 @@ EXPLAIN
...
@@ -1689,7 +1689,7 @@ EXPLAIN
}
}
}
}
explain format=json
explain format=json
select
select
rank() over (partition by c order by a),
rank() over (partition by c order by a),
count(*) over (partition by c)
count(*) over (partition by c)
from t1;
from t1;
...
@@ -1715,7 +1715,7 @@ EXPLAIN
...
@@ -1715,7 +1715,7 @@ EXPLAIN
}
}
}
}
explain format=json
explain format=json
select
select
count(*) over (partition by c),
count(*) over (partition by c),
rank() over (partition by c order by a)
rank() over (partition by c order by a)
from t1;
from t1;
...
@@ -1811,7 +1811,7 @@ drop table t1;
...
@@ -1811,7 +1811,7 @@ drop table t1;
# Try window functions that are not directly present in the select list
# Try window functions that are not directly present in the select list
#
#
create table t1 (a int, b int);
create table t1 (a int, b int);
insert into t1 values
insert into t1 values
(1,3),
(1,3),
(2,2),
(2,2),
(3,1);
(3,1);
...
@@ -1845,7 +1845,7 @@ insert into t1 values (1, 1, 1);
...
@@ -1845,7 +1845,7 @@ insert into t1 values (1, 1, 1);
insert into t1 values (1, 2, 2);
insert into t1 values (1, 2, 2);
insert into t1 values (1, 3, 4);
insert into t1 values (1, 3, 4);
insert into t1 values (1, 4, 8);
insert into t1 values (1, 4, 8);
select
select
pk, a,
pk, a,
sum(a) over (order by pk rows between 0 preceding and current row)
sum(a) over (order by pk rows between 0 preceding and current row)
from t1;
from t1;
...
@@ -1854,8 +1854,8 @@ pk a sum(a) over (order by pk rows between 0 preceding and current row)
...
@@ -1854,8 +1854,8 @@ pk a sum(a) over (order by pk rows between 0 preceding and current row)
2 2 2
2 2 2
3 4 4
3 4 4
4 8 8
4 8 8
select
select
pk, a,
pk, a,
sum(a) over (order by pk rows between 1 preceding and 0 preceding)
sum(a) over (order by pk rows between 1 preceding and 0 preceding)
from t1;
from t1;
pk a sum(a) over (order by pk rows between 1 preceding and 0 preceding)
pk a sum(a) over (order by pk rows between 1 preceding and 0 preceding)
...
@@ -1867,7 +1867,7 @@ insert into t1 values (200, 1, 1);
...
@@ -1867,7 +1867,7 @@ insert into t1 values (200, 1, 1);
insert into t1 values (200, 2, 2);
insert into t1 values (200, 2, 2);
insert into t1 values (200, 3, 4);
insert into t1 values (200, 3, 4);
insert into t1 values (200, 4, 8);
insert into t1 values (200, 4, 8);
select
select
part_id, pk, a,
part_id, pk, a,
sum(a) over (partition by part_id order by pk rows between 0 preceding and current row)
sum(a) over (partition by part_id order by pk rows between 0 preceding and current row)
from t1;
from t1;
...
@@ -1880,8 +1880,8 @@ part_id pk a sum(a) over (partition by part_id order by pk rows between 0 preced
...
@@ -1880,8 +1880,8 @@ part_id pk a sum(a) over (partition by part_id order by pk rows between 0 preced
200 2 2 2
200 2 2 2
200 3 4 4
200 3 4 4
200 4 8 8
200 4 8 8
select
select
part_id, pk, a,
part_id, pk, a,
sum(a) over (partition by part_id order by pk rows between 1 preceding and 0 preceding)
sum(a) over (partition by part_id order by pk rows between 1 preceding and 0 preceding)
from t1;
from t1;
part_id pk a sum(a) over (partition by part_id order by pk rows between 1 preceding and 0 preceding)
part_id pk a sum(a) over (partition by part_id order by pk rows between 1 preceding and 0 preceding)
...
@@ -1896,7 +1896,7 @@ part_id pk a sum(a) over (partition by part_id order by pk rows between 1 preced
...
@@ -1896,7 +1896,7 @@ part_id pk a sum(a) over (partition by part_id order by pk rows between 1 preced
drop table t1;
drop table t1;
#
#
# MDEV-9780, The "DISTINCT must not bet converted into GROUP BY when
# MDEV-9780, The "DISTINCT must not bet converted into GROUP BY when
# window functions are present" part
# window functions are present" part
#
#
create table t1 (part_id int, a int);
create table t1 (part_id int, a int);
insert into t1 values
insert into t1 values
...
@@ -1953,8 +1953,8 @@ EXPLAIN
...
@@ -1953,8 +1953,8 @@ EXPLAIN
}
}
drop table t1;
drop table t1;
#
#
# MDEV-9893: Window functions with different ORDER BY lists,
# MDEV-9893: Window functions with different ORDER BY lists,
# one of these lists containing an expression
# one of these lists containing an expression
#
#
create table t1 (s1 int, s2 char(5));
create table t1 (s1 int, s2 char(5));
insert into t1 values (1,'a');
insert into t1 values (1,'a');
...
@@ -1963,10 +1963,10 @@ insert into t1 values (3,null);
...
@@ -1963,10 +1963,10 @@ insert into t1 values (3,null);
insert into t1 values (4,'a');
insert into t1 values (4,'a');
insert into t1 values (2,'b');
insert into t1 values (2,'b');
insert into t1 values (-1,'');
insert into t1 values (-1,'');
select
select
*,
*,
ROW_NUMBER() OVER (order by s1),
ROW_NUMBER() OVER (order by s1),
CUME_DIST() OVER (order by -s1)
CUME_DIST() OVER (order by -s1)
from t1;
from t1;
s1 s2 ROW_NUMBER() OVER (order by s1) CUME_DIST() OVER (order by -s1)
s1 s2 ROW_NUMBER() OVER (order by s1) CUME_DIST() OVER (order by -s1)
1 a 3 0.8333333333
1 a 3 0.8333333333
...
@@ -2016,7 +2016,7 @@ AND 15 FOLLOWING)
...
@@ -2016,7 +2016,7 @@ AND 15 FOLLOWING)
238 NULL
238 NULL
DROP table orders;
DROP table orders;
#
#
# MDEV-10842: window functions with the same order column
# MDEV-10842: window functions with the same order column
# but different directions
# but different directions
#
#
create table t1 (
create table t1 (
...
...
mysql-test/t/win.test
View file @
29b227c3
...
@@ -11,7 +11,7 @@ drop view if exists v1;
...
@@ -11,7 +11,7 @@ drop view if exists v1;
--
echo
# # Parser tests
--
echo
# # Parser tests
--
echo
# ########################################################################
--
echo
# ########################################################################
--
echo
#
--
echo
#
--
echo
# Check what happens when one attempts to use window function without OVER clause
--
echo
# Check what happens when one attempts to use window function without OVER clause
create
table
t1
(
a
int
,
b
int
);
create
table
t1
(
a
int
,
b
int
);
insert
into
t1
values
(
1
,
1
),(
2
,
2
);
insert
into
t1
values
(
1
,
1
),(
2
,
2
);
...
@@ -21,7 +21,7 @@ select row_number() from t1;
...
@@ -21,7 +21,7 @@ select row_number() from t1;
select
rank
()
from
t1
;
select
rank
()
from
t1
;
--
echo
# Attempt to use window function in the WHERE clause
--
echo
# Attempt to use window function in the WHERE clause
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
select
*
from
t1
where
1
=
rank
()
over
(
order
by
a
);
select
*
from
t1
where
1
=
rank
()
over
(
order
by
a
);
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
select
*
from
t1
where
1
>
row_number
()
over
(
partition
by
b
order
by
a
);
select
*
from
t1
where
1
>
row_number
()
over
(
partition
by
b
order
by
a
);
...
@@ -47,16 +47,16 @@ select a, b, x, row_number() over (partition by a order by x) from t1;
...
@@ -47,16 +47,16 @@ select a, b, x, row_number() over (partition by a order by x) from t1;
drop
table
t1
;
drop
table
t1
;
create
table
t1
(
pk
int
primary
key
,
a
int
,
b
int
);
create
table
t1
(
pk
int
primary
key
,
a
int
,
b
int
);
insert
into
t1
values
insert
into
t1
values
(
1
,
10
,
22
),
(
1
,
10
,
22
),
(
2
,
11
,
21
),
(
2
,
11
,
21
),
(
3
,
12
,
20
),
(
3
,
12
,
20
),
(
4
,
13
,
19
),
(
4
,
13
,
19
),
(
5
,
14
,
18
);
(
5
,
14
,
18
);
select
select
pk
,
a
,
b
,
pk
,
a
,
b
,
row_number
()
over
(
order
by
a
),
row_number
()
over
(
order
by
a
),
row_number
()
over
(
order
by
b
)
row_number
()
over
(
order
by
b
)
from
t1
;
from
t1
;
...
@@ -66,7 +66,7 @@ drop table t1;
...
@@ -66,7 +66,7 @@ drop table t1;
--
echo
# Try RANK() function
--
echo
# Try RANK() function
--
echo
#
--
echo
#
create
table
t2
(
create
table
t2
(
pk
int
primary
key
,
pk
int
primary
key
,
a
int
a
int
);
);
...
@@ -82,7 +82,9 @@ insert into t2 values
...
@@ -82,7 +82,9 @@ insert into t2 values
(
9
,
4
),
(
9
,
4
),
(
10
,
4
);
(
10
,
4
);
--
sorted_result
select
pk
,
a
,
rank
()
over
(
order
by
a
)
from
t2
;
select
pk
,
a
,
rank
()
over
(
order
by
a
)
from
t2
;
--
sorted_result
select
pk
,
a
,
rank
()
over
(
order
by
a
desc
)
from
t2
;
select
pk
,
a
,
rank
()
over
(
order
by
a
desc
)
from
t2
;
drop
table
t2
;
drop
table
t2
;
...
@@ -98,45 +100,45 @@ insert into t1 select a+1,1 from t0;
...
@@ -98,45 +100,45 @@ insert into t1 select a+1,1 from t0;
update
t1
set
c
=
2
where
pk
not
in
(
1
,
2
,
3
,
4
);
update
t1
set
c
=
2
where
pk
not
in
(
1
,
2
,
3
,
4
);
select
*
from
t1
;
select
*
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
between
2
preceding
and
2
following
)
as
CNT
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
;
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
between
1
preceding
and
2
following
)
as
CNT
rows
between
1
preceding
and
2
following
)
as
CNT
from
t1
;
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
between
2
preceding
and
current
row
)
as
CNT
rows
between
2
preceding
and
current
row
)
as
CNT
from
t1
;
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
between
1
following
and
2
following
)
as
CNT
between
1
following
and
2
following
)
as
CNT
from
t1
;
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
between
2
preceding
and
1
preceding
)
as
CNT
between
2
preceding
and
1
preceding
)
as
CNT
from
t1
;
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
count
(
*
)
over
(
partition
by
c
order
by
pk
rows
between
current
row
and
1
following
)
as
CNT
rows
between
current
row
and
1
following
)
as
CNT
from
t1
;
from
t1
;
--
echo
# Check ORDER BY DESC
--
echo
# Check ORDER BY DESC
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
partition
by
c
order
by
pk
desc
count
(
*
)
over
(
partition
by
c
order
by
pk
desc
rows
between
2
preceding
and
2
following
)
as
CNT
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
;
from
t1
;
...
@@ -155,197 +157,197 @@ insert into t1 select a+1,1 from t0;
...
@@ -155,197 +157,197 @@ insert into t1 select a+1,1 from t0;
update
t1
set
c
=
2
where
pk
not
in
(
1
,
2
,
3
,
4
);
update
t1
set
c
=
2
where
pk
not
in
(
1
,
2
,
3
,
4
);
select
*
from
t1
;
select
*
from
t1
;
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
w1
as
CNT
count
(
*
)
over
w1
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
window
w1
as
(
partition
by
c
order
by
pk
rows
between
2
preceding
and
2
following
);
rows
between
2
preceding
and
2
following
);
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w1
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w1
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
);
window
w1
as
(
partition
by
c
order
by
pk
);
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w1
order
by
pk
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w1
order
by
pk
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
);
window
w1
as
(
partition
by
c
);
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
),
w2
as
(
w1
order
by
pk
);
window
w1
as
(
partition
by
c
),
w2
as
(
w1
order
by
pk
);
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
w3
as
CNT
count
(
*
)
over
w3
as
CNT
from
t1
from
t1
window
window
w1
as
(
partition
by
c
),
w1
as
(
partition
by
c
),
w2
as
(
w1
order
by
pk
),
w2
as
(
w1
order
by
pk
),
w3
as
(
w2
rows
between
2
preceding
and
2
following
);
w3
as
(
w2
rows
between
2
preceding
and
2
following
);
--
error
ER_WRONG_WINDOW_SPEC_NAME
--
error
ER_WRONG_WINDOW_SPEC_NAME
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
w
as
CNT
count
(
*
)
over
w
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
window
w1
as
(
partition
by
c
order
by
pk
rows
between
2
preceding
and
2
following
);
rows
between
2
preceding
and
2
following
);
--
error
ER_DUP_WINDOW_NAME
--
error
ER_DUP_WINDOW_NAME
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
),
w1
as
(
order
by
pk
);
window
w1
as
(
partition
by
c
),
w1
as
(
order
by
pk
);
--
error
ER_WRONG_WINDOW_SPEC_NAME
--
error
ER_WRONG_WINDOW_SPEC_NAME
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
),
w2
as
(
w
partition
by
c
order
by
pk
);
window
w1
as
(
partition
by
c
),
w2
as
(
w
partition
by
c
order
by
pk
);
--
error
ER_PARTITION_LIST_IN_REFERENCING_WINDOW_SPEC
--
error
ER_PARTITION_LIST_IN_REFERENCING_WINDOW_SPEC
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
),
w2
as
(
w1
partition
by
c
order
by
pk
);
window
w1
as
(
partition
by
c
),
w2
as
(
w1
partition
by
c
order
by
pk
);
--
error
ER_ORDER_LIST_IN_REFERENCING_WINDOW_SPEC
--
error
ER_ORDER_LIST_IN_REFERENCING_WINDOW_SPEC
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
count
(
*
)
over
(
w2
rows
between
2
preceding
and
2
following
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
),
w2
as
(
w1
order
by
pk
);
window
w1
as
(
partition
by
c
order
by
pk
),
w2
as
(
w1
order
by
pk
);
--
error
ER_WINDOW_FRAME_IN_REFERENCED_WINDOW_SPEC
--
error
ER_WINDOW_FRAME_IN_REFERENCED_WINDOW_SPEC
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
w3
as
CNT
count
(
*
)
over
w3
as
CNT
from
t1
from
t1
window
window
w1
as
(
partition
by
c
),
w1
as
(
partition
by
c
),
w2
as
(
w1
order
by
pk
rows
between
3
preceding
and
2
following
),
w2
as
(
w1
order
by
pk
rows
between
3
preceding
and
2
following
),
w3
as
(
w2
rows
between
2
preceding
and
2
following
);
w3
as
(
w2
rows
between
2
preceding
and
2
following
);
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
w1
as
CNT
count
(
*
)
over
w1
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
window
w1
as
(
partition
by
c
order
by
pk
rows
between
unbounded
following
and
2
following
);
rows
between
unbounded
following
and
2
following
);
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w1
rows
between
2
preceding
and
unbounded
preceding
)
as
CNT
count
(
*
)
over
(
w1
rows
between
2
preceding
and
unbounded
preceding
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
);
window
w1
as
(
partition
by
c
order
by
pk
);
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w1
order
by
pk
rows
between
current
row
and
2
preceding
)
as
CNT
count
(
*
)
over
(
w1
order
by
pk
rows
between
current
row
and
2
preceding
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
);
window
w1
as
(
partition
by
c
);
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
--
error
ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS
select
select
pk
,
c
,
pk
,
c
,
count
(
*
)
over
(
w2
rows
between
2
following
and
current
row
)
as
CNT
count
(
*
)
over
(
w2
rows
between
2
following
and
current
row
)
as
CNT
from
t1
from
t1
window
w1
as
(
partition
by
c
),
w2
as
(
w1
order
by
pk
);
window
w1
as
(
partition
by
c
),
w2
as
(
w1
order
by
pk
);
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
select
select
pk
,
c
pk
,
c
from
t1
where
rank
()
over
w1
>
2
from
t1
where
rank
()
over
w1
>
2
window
w1
as
(
partition
by
c
order
by
pk
);
window
w1
as
(
partition
by
c
order
by
pk
);
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
select
select
c
,
max
(
pk
)
as
m
c
,
max
(
pk
)
as
m
from
t1
from
t1
group
by
c
+
rank
()
over
w1
group
by
c
+
rank
()
over
w1
window
w1
as
(
order
by
m
);
window
w1
as
(
order
by
m
);
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
select
select
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
from
t1
from
t1
group
by
c
+
r
group
by
c
+
r
window
w1
as
(
order
by
m
);
window
w1
as
(
order
by
m
);
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
--
error
ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION
select
select
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
from
t1
from
t1
group
by
c
having
c
+
r
>
3
group
by
c
having
c
+
r
>
3
window
w1
as
(
order
by
m
);
window
w1
as
(
order
by
m
);
--
error
ER_WINDOW_FUNCTION_IN_WINDOW_SPEC
--
error
ER_WINDOW_FUNCTION_IN_WINDOW_SPEC
select
select
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
,
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
,
rank
()
over
(
partition
by
r
+
1
order
by
m
)
rank
()
over
(
partition
by
r
+
1
order
by
m
)
from
t1
from
t1
group
by
c
group
by
c
window
w1
as
(
order
by
m
);
window
w1
as
(
order
by
m
);
--
error
ER_WINDOW_FUNCTION_IN_WINDOW_SPEC
--
error
ER_WINDOW_FUNCTION_IN_WINDOW_SPEC
select
select
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
,
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
,
rank
()
over
(
partition
by
m
order
by
r
)
rank
()
over
(
partition
by
m
order
by
r
)
from
t1
from
t1
group
by
c
group
by
c
window
w1
as
(
order
by
m
);
window
w1
as
(
order
by
m
);
--
error
ER_WINDOW_FUNCTION_IN_WINDOW_SPEC
--
error
ER_WINDOW_FUNCTION_IN_WINDOW_SPEC
select
select
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
,
dense_rank
()
over
w2
as
dr
c
,
max
(
pk
)
as
m
,
rank
()
over
w1
as
r
,
dense_rank
()
over
w2
as
dr
from
t1
from
t1
group
by
c
group
by
c
window
w1
as
(
order
by
m
),
w2
as
(
partition
by
r
order
by
m
);
window
w1
as
(
order
by
m
),
w2
as
(
partition
by
r
order
by
m
);
--
error
ER_NOT_ALLOWED_WINDOW_FRAME
--
error
ER_NOT_ALLOWED_WINDOW_FRAME
select
select
pk
,
c
,
pk
,
c
,
row_number
()
over
(
partition
by
c
order
by
pk
row_number
()
over
(
partition
by
c
order
by
pk
range
between
unbounded
preceding
and
current
row
)
as
r
range
between
unbounded
preceding
and
current
row
)
as
r
from
t1
;
from
t1
;
--
error
ER_NOT_ALLOWED_WINDOW_FRAME
--
error
ER_NOT_ALLOWED_WINDOW_FRAME
select
select
pk
,
c
,
pk
,
c
,
rank
()
over
w1
as
r
rank
()
over
w1
as
r
from
t1
from
t1
window
w1
as
(
partition
by
c
order
by
pk
window
w1
as
(
partition
by
c
order
by
pk
rows
between
2
preceding
and
2
following
);
rows
between
2
preceding
and
2
following
);
--
error
ER_NOT_ALLOWED_WINDOW_FRAME
--
error
ER_NOT_ALLOWED_WINDOW_FRAME
select
select
pk
,
c
,
pk
,
c
,
dense_rank
()
over
(
partition
by
c
order
by
pk
dense_rank
()
over
(
partition
by
c
order
by
pk
rows
between
1
preceding
and
1
following
)
as
r
rows
between
1
preceding
and
1
following
)
as
r
from
t1
;
from
t1
;
--
error
ER_NO_ORDER_LIST_IN_WINDOW_SPEC
--
error
ER_NO_ORDER_LIST_IN_WINDOW_SPEC
select
select
pk
,
c
,
pk
,
c
,
rank
()
over
w1
as
r
rank
()
over
w1
as
r
from
t1
from
t1
window
w1
as
(
partition
by
c
);
window
w1
as
(
partition
by
c
);
--
error
ER_NO_ORDER_LIST_IN_WINDOW_SPEC
--
error
ER_NO_ORDER_LIST_IN_WINDOW_SPEC
select
select
pk
,
c
,
pk
,
c
,
dense_rank
()
over
(
partition
by
c
)
as
r
dense_rank
()
over
(
partition
by
c
)
as
r
from
t1
;
from
t1
;
...
@@ -358,11 +360,11 @@ drop table t0,t1;
...
@@ -358,11 +360,11 @@ drop table t0,t1;
create
table
t0
(
a
int
);
create
table
t0
(
a
int
);
insert
into
t0
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
insert
into
t0
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
create
table
t2
(
part_id
int
,
pk
int
,
a
int
);
create
table
t2
(
part_id
int
,
pk
int
,
a
int
);
insert
into
t2
select
insert
into
t2
select
if
(
a
<
5
,
0
,
1
),
a
,
if
(
a
<
5
,
NULL
,
1
)
from
t0
;
if
(
a
<
5
,
0
,
1
),
a
,
if
(
a
<
5
,
NULL
,
1
)
from
t0
;
select
*
from
t2
;
select
*
from
t2
;
select
select
part_id
,
pk
,
a
,
part_id
,
pk
,
a
,
count
(
a
)
over
(
partition
by
part_id
order
by
pk
count
(
a
)
over
(
partition
by
part_id
order
by
pk
rows
between
1
preceding
and
1
following
)
as
CNT
rows
between
1
preceding
and
1
following
)
as
CNT
...
@@ -371,11 +373,11 @@ from t2;
...
@@ -371,11 +373,11 @@ from t2;
drop
table
t0
,
t2
;
drop
table
t0
,
t2
;
--
echo
#
--
echo
#
--
echo
# RANGE-type bounds
--
echo
# RANGE-type bounds
--
echo
#
--
echo
#
create
table
t3
(
create
table
t3
(
pk
int
,
pk
int
,
val
int
val
int
);
);
...
@@ -388,25 +390,25 @@ insert into t3 values
...
@@ -388,25 +390,25 @@ insert into t3 values
(
5
,
2
),
(
5
,
2
),
(
6
,
2
);
(
6
,
2
);
select
select
pk
,
pk
,
val
,
val
,
count
(
val
)
over
(
order
by
val
count
(
val
)
over
(
order
by
val
range
between
current
row
and
range
between
current
row
and
current
row
)
current
row
)
as
CNT
as
CNT
from
t3
;
from
t3
;
insert
into
t3
values
insert
into
t3
values
(
7
,
3
),
(
7
,
3
),
(
8
,
3
);
(
8
,
3
);
select
select
pk
,
pk
,
val
,
val
,
count
(
val
)
over
(
order
by
val
count
(
val
)
over
(
order
by
val
range
between
current
row
and
range
between
current
row
and
current
row
)
current
row
)
as
CNT
as
CNT
from
t3
;
from
t3
;
...
@@ -440,50 +442,50 @@ insert into t4 values
...
@@ -440,50 +442,50 @@ insert into t4 values
(
5678
,
207
,
3
),
(
5678
,
207
,
3
),
(
5678
,
208
,
3
);
(
5678
,
208
,
3
);
select
select
part_id
,
part_id
,
pk
,
pk
,
val
,
val
,
count
(
val
)
over
(
partition
by
part_id
count
(
val
)
over
(
partition
by
part_id
order
by
val
order
by
val
range
between
current
row
and
range
between
current
row
and
current
row
)
current
row
)
as
CNT
as
CNT
from
t4
;
from
t4
;
--
echo
#
--
echo
#
--
echo
# Try RANGE UNBOUNDED PRECEDING | FOLLOWING
--
echo
# Try RANGE UNBOUNDED PRECEDING | FOLLOWING
--
echo
#
--
echo
#
select
select
part_id
,
part_id
,
pk
,
pk
,
val
,
val
,
count
(
val
)
over
(
partition
by
part_id
count
(
val
)
over
(
partition
by
part_id
order
by
val
order
by
val
range
between
unbounded
preceding
and
range
between
unbounded
preceding
and
current
row
)
current
row
)
as
CNT
as
CNT
from
t4
;
from
t4
;
select
select
part_id
,
part_id
,
pk
,
pk
,
val
,
val
,
count
(
val
)
over
(
partition
by
part_id
count
(
val
)
over
(
partition
by
part_id
order
by
val
order
by
val
range
between
current
row
and
range
between
current
row
and
unbounded
following
)
unbounded
following
)
as
CNT
as
CNT
from
t4
;
from
t4
;
select
select
part_id
,
part_id
,
pk
,
pk
,
val
,
val
,
count
(
val
)
over
(
partition
by
part_id
count
(
val
)
over
(
partition
by
part_id
order
by
val
order
by
val
range
between
unbounded
preceding
and
range
between
unbounded
preceding
and
unbounded
following
)
unbounded
following
)
as
CNT
as
CNT
from
t4
;
from
t4
;
...
@@ -502,12 +504,12 @@ insert into t1 values
...
@@ -502,12 +504,12 @@ insert into t1 values
(
6
,
2
,
64
),
(
6
,
2
,
64
),
(
7
,
2
,
128
),
(
7
,
2
,
128
),
(
8
,
2
,
16
);
(
8
,
2
,
16
);
select
pk
,
a
,
b
,
select
pk
,
a
,
b
,
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
1
PRECEDING
AND
1
FOLLOWING
)
as
bit_or
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
1
PRECEDING
AND
1
FOLLOWING
)
as
bit_or
from
t1
;
from
t1
;
--
echo
# Extra ROWS n PRECEDING tests
--
echo
# Extra ROWS n PRECEDING tests
select
pk
,
a
,
b
,
select
pk
,
a
,
b
,
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
1
PRECEDING
AND
1
PRECEDING
)
as
bit_or
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
1
PRECEDING
AND
1
PRECEDING
)
as
bit_or
from
t1
;
from
t1
;
...
@@ -515,8 +517,8 @@ drop table t1;
...
@@ -515,8 +517,8 @@ drop table t1;
create
table
t2
(
create
table
t2
(
pk
int
,
pk
int
,
a
int
,
a
int
,
b
int
b
int
);
);
...
@@ -546,7 +548,7 @@ select pk, a, b,
...
@@ -546,7 +548,7 @@ select pk, a, b,
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
2
PRECEDING
AND
1
PRECEDING
)
as
bit_or
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
2
PRECEDING
AND
1
PRECEDING
)
as
bit_or
from
t2
;
from
t2
;
--
echo
# Check CURRENT ROW
--
echo
# Check CURRENT ROW
select
pk
,
a
,
b
,
select
pk
,
a
,
b
,
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
CURRENT
ROW
AND
CURRENT
ROW
)
as
bit_or
bit_or
(
b
)
over
(
partition
by
a
order
by
pk
ROWS
BETWEEN
CURRENT
ROW
AND
CURRENT
ROW
)
as
bit_or
...
@@ -563,12 +565,12 @@ create table t1 (
...
@@ -563,12 +565,12 @@ create table t1 (
a
int
a
int
);
);
insert
into
t1
values
insert
into
t1
values
(
10
,
1
,
1
),
(
10
,
1
,
1
),
(
10
,
2
,
2
),
(
10
,
2
,
2
),
(
10
,
3
,
4
),
(
10
,
3
,
4
),
(
10
,
4
,
8
),
(
10
,
4
,
8
),
(
10
,
5
,
26
),
(
10
,
5
,
26
),
(
10
,
6
,
27
),
(
10
,
6
,
27
),
(
10
,
7
,
40
),
(
10
,
7
,
40
),
(
10
,
8
,
71
),
(
10
,
8
,
71
),
...
@@ -577,64 +579,64 @@ insert into t1 values
...
@@ -577,64 +579,64 @@ insert into t1 values
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
count
(
a
)
over
(
ORDER
BY
a
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
10
FOLLOWING
)
as
cnt
AND
10
FOLLOWING
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
DESC
count
(
a
)
over
(
ORDER
BY
a
DESC
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
10
FOLLOWING
)
as
cnt
AND
10
FOLLOWING
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
count
(
a
)
over
(
ORDER
BY
a
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
1
FOLLOWING
)
as
cnt
AND
1
FOLLOWING
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
count
(
a
)
over
(
ORDER
BY
a
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
10
PRECEDING
)
as
cnt
AND
10
PRECEDING
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
DESC
count
(
a
)
over
(
ORDER
BY
a
DESC
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
10
PRECEDING
)
as
cnt
AND
10
PRECEDING
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
count
(
a
)
over
(
ORDER
BY
a
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
1
PRECEDING
)
as
cnt
AND
1
PRECEDING
)
as
cnt
from
t1
;
from
t1
;
# Try bottom bound
# Try bottom bound
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
count
(
a
)
over
(
ORDER
BY
a
RANGE
BETWEEN
1
PRECEDING
RANGE
BETWEEN
1
PRECEDING
AND
CURRENT
ROW
)
as
cnt
AND
CURRENT
ROW
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
DESC
count
(
a
)
over
(
ORDER
BY
a
DESC
RANGE
BETWEEN
1
PRECEDING
RANGE
BETWEEN
1
PRECEDING
AND
CURRENT
ROW
)
as
cnt
AND
CURRENT
ROW
)
as
cnt
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
ORDER
BY
a
count
(
a
)
over
(
ORDER
BY
a
RANGE
BETWEEN
1
FOLLOWING
RANGE
BETWEEN
1
FOLLOWING
AND
3
FOLLOWING
)
as
cnt
AND
3
FOLLOWING
)
as
cnt
from
t1
;
from
t1
;
...
@@ -660,7 +662,7 @@ select
...
@@ -660,7 +662,7 @@ select
part_id
,
pk
,
a
,
part_id
,
pk
,
a
,
count
(
a
)
over
(
PARTITION
BY
part_id
count
(
a
)
over
(
PARTITION
BY
part_id
ORDER
BY
a
ORDER
BY
a
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
10
FOLLOWING
)
as
cnt
AND
10
FOLLOWING
)
as
cnt
from
t1
;
from
t1
;
...
@@ -668,7 +670,7 @@ select
...
@@ -668,7 +670,7 @@ select
pk
,
a
,
pk
,
a
,
count
(
a
)
over
(
PARTITION
BY
part_id
count
(
a
)
over
(
PARTITION
BY
part_id
ORDER
BY
a
ORDER
BY
a
RANGE
BETWEEN
UNBOUNDED
PRECEDING
RANGE
BETWEEN
UNBOUNDED
PRECEDING
AND
1
PRECEDING
)
as
cnt
AND
1
PRECEDING
)
as
cnt
from
t1
;
from
t1
;
...
@@ -689,17 +691,17 @@ insert into t1 values (1, 1.22);
...
@@ -689,17 +691,17 @@ insert into t1 values (1, 1.22);
insert
into
t1
values
(
1
,
3.33
);
insert
into
t1
values
(
1
,
3.33
);
select
select
a
,
a
,
count
(
col1
)
over
(
order
by
a
count
(
col1
)
over
(
order
by
a
range
between
0.1
preceding
range
between
0.1
preceding
and
0.1
following
)
and
0.1
following
)
from
t1
;
from
t1
;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# RANGE-type frames and NULL values
--
echo
# RANGE-type frames and NULL values
--
echo
#
--
echo
#
create
table
t1
(
create
table
t1
(
pk
int
,
pk
int
,
a
int
,
a
int
,
...
@@ -716,17 +718,17 @@ insert into t1 values (7, 13 ,1);
...
@@ -716,17 +718,17 @@ insert into t1 values (7, 13 ,1);
insert
into
t1
values
(
8
,
14
,
1
);
insert
into
t1
values
(
8
,
14
,
1
);
select
select
pk
,
a
,
pk
,
a
,
count
(
b
)
over
(
order
by
a
count
(
b
)
over
(
order
by
a
range
between
2
preceding
range
between
2
preceding
and
2
following
)
as
CNT
and
2
following
)
as
CNT
from
t1
;
from
t1
;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# Try ranges that have bound1 > bound2. The standard actually allows them
--
echo
# Try ranges that have bound1 > bound2. The standard actually allows them
--
echo
#
--
echo
#
create
table
t0
(
a
int
);
create
table
t0
(
a
int
);
insert
into
t0
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
insert
into
t0
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
...
@@ -741,7 +743,7 @@ select
...
@@ -741,7 +743,7 @@ select
count
(
*
)
over
(
partition
by
c
count
(
*
)
over
(
partition
by
c
order
by
pk
order
by
pk
rows
between
1
preceding
rows
between
1
preceding
and
2
preceding
)
and
2
preceding
)
as
cnt
as
cnt
from
t1
;
from
t1
;
...
@@ -769,7 +771,7 @@ select
...
@@ -769,7 +771,7 @@ select
count
(
*
)
over
(
partition
by
c
count
(
*
)
over
(
partition
by
c
order
by
pk
order
by
pk
range
between
1
preceding
range
between
1
preceding
and
2
preceding
)
and
2
preceding
)
as
cnt
as
cnt
from
t1
;
from
t1
;
drop
table
t0
,
t1
;
drop
table
t0
,
t1
;
...
@@ -782,7 +784,7 @@ create table t1 (a int, b int, c varchar(32));
...
@@ -782,7 +784,7 @@ create table t1 (a int, b int, c varchar(32));
insert
into
t1
values
(
1
,
1
,
'foo'
);
insert
into
t1
values
(
1
,
1
,
'foo'
);
insert
into
t1
values
(
2
,
2
,
'bar'
);
insert
into
t1
values
(
2
,
2
,
'bar'
);
--
error
ER_RANGE_FRAME_NEEDS_SIMPLE_ORDERBY
--
error
ER_RANGE_FRAME_NEEDS_SIMPLE_ORDERBY
select
select
count
(
*
)
over
(
order
by
a
,
b
count
(
*
)
over
(
order
by
a
,
b
range
between
unbounded
preceding
and
current
row
)
range
between
unbounded
preceding
and
current
row
)
from
t1
;
from
t1
;
...
@@ -819,7 +821,7 @@ select
...
@@ -819,7 +821,7 @@ select
from
t1
;
from
t1
;
--
echo
#
--
echo
#
--
echo
# EXCLUDE clause is parsed but not supported
--
echo
# EXCLUDE clause is parsed but not supported
--
echo
#
--
echo
#
--
error
ER_FRAME_EXCLUSION_NOT_SUPPORTED
--
error
ER_FRAME_EXCLUSION_NOT_SUPPORTED
...
@@ -852,15 +854,15 @@ from t1;
...
@@ -852,15 +854,15 @@ from t1;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# Window function in grouping query
--
echo
# Window function in grouping query
--
echo
#
--
echo
#
create
table
t1
(
create
table
t1
(
username
varchar
(
32
),
username
varchar
(
32
),
amount
int
amount
int
);
);
insert
into
t1
values
insert
into
t1
values
(
'user1'
,
1
),
(
'user1'
,
1
),
(
'user1'
,
5
),
(
'user1'
,
5
),
...
@@ -868,19 +870,19 @@ insert into t1 values
...
@@ -868,19 +870,19 @@ insert into t1 values
(
'user2'
,
10
),
(
'user2'
,
10
),
(
'user2'
,
20
),
(
'user2'
,
20
),
(
'user2'
,
30
);
(
'user2'
,
30
);
select
select
username
,
username
,
sum
(
amount
)
as
s
,
sum
(
amount
)
as
s
,
rank
()
over
(
order
by
s
desc
)
rank
()
over
(
order
by
s
desc
)
from
t1
from
t1
group
by
username
;
group
by
username
;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# mdev-9719: Window function in prepared statement
--
echo
# mdev-9719: Window function in prepared statement
--
echo
#
--
echo
#
create
table
t1
(
a
int
,
b
int
,
x
char
(
32
));
create
table
t1
(
a
int
,
b
int
,
x
char
(
32
));
insert
into
t1
values
(
2
,
10
,
'xx'
);
insert
into
t1
values
(
2
,
10
,
'xx'
);
...
@@ -888,31 +890,31 @@ insert into t1 values (2, 10, 'zz');
...
@@ -888,31 +890,31 @@ insert into t1 values (2, 10, 'zz');
insert
into
t1
values
(
2
,
20
,
'yy'
);
insert
into
t1
values
(
2
,
20
,
'yy'
);
insert
into
t1
values
(
3
,
10
,
'xxx'
);
insert
into
t1
values
(
3
,
10
,
'xxx'
);
insert
into
t1
values
(
3
,
20
,
'vvv'
);
insert
into
t1
values
(
3
,
20
,
'vvv'
);
prepare
stmt
from
'select a, row_number() over (partition by a order by b) from t1'
;
prepare
stmt
from
'select a, row_number() over (partition by a order by b) from t1'
;
--
sorted_result
--
sorted_result
execute
stmt
;
execute
stmt
;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# mdev-9754: Window name resolution in prepared statement
--
echo
# mdev-9754: Window name resolution in prepared statement
--
echo
#
--
echo
#
create
table
t0
(
a
int
);
create
table
t0
(
a
int
);
insert
into
t0
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
insert
into
t0
values
(
0
),(
1
),(
2
),(
3
),(
4
),(
5
),(
6
),(
7
),(
8
),(
9
);
create
table
t1
(
pk
int
,
c
int
);
create
table
t1
(
pk
int
,
c
int
);
insert
into
t1
select
a
+
1
,
1
from
t0
;
insert
into
t1
select
a
+
1
,
1
from
t0
;
update
t1
set
c
=
2
where
pk
not
in
(
1
,
2
,
3
,
4
);
update
t1
set
c
=
2
where
pk
not
in
(
1
,
2
,
3
,
4
);
select
*
from
t1
;
select
*
from
t1
;
prepare
stmt
from
prepare
stmt
from
'select
'select
pk, c,
pk, c,
count(*) over w1 as CNT
count(*) over w1 as CNT
from t1
from t1
window w1 as (partition by c order by pk
window w1 as (partition by c order by pk
rows between 2 preceding and 2 following)'
;
rows between 2 preceding and 2 following)'
;
execute
stmt
;
execute
stmt
;
...
@@ -999,10 +1001,10 @@ insert into t1 values
...
@@ -999,10 +1001,10 @@ insert into t1 values
select
sum
(
b
)
over
(
partition
by
a
order
by
b
,
pk
select
sum
(
b
)
over
(
partition
by
a
order
by
b
,
pk
rows
between
unbounded
preceding
and
current
row
)
as
c1
,
rows
between
unbounded
preceding
and
current
row
)
as
c1
,
avg
(
b
)
over
(
w1
rows
between
1
preceding
and
1
following
)
as
c2
,
avg
(
b
)
over
(
w1
rows
between
1
preceding
and
1
following
)
as
c2
,
sum
(
c
)
over
(
w2
rows
between
1
preceding
and
1
following
)
as
c5
,
sum
(
c
)
over
(
w2
rows
between
1
preceding
and
1
following
)
as
c5
,
avg
(
b
)
over
(
w1
rows
between
5
preceding
and
5
following
)
as
c3
,
avg
(
b
)
over
(
w1
rows
between
5
preceding
and
5
following
)
as
c3
,
sum
(
b
)
over
(
w1
rows
between
1
preceding
and
1
following
)
as
c4
sum
(
b
)
over
(
w1
rows
between
1
preceding
and
1
following
)
as
c4
from
t1
from
t1
window
w1
as
(
partition
by
a
order
by
b
,
pk
),
window
w1
as
(
partition
by
a
order
by
b
,
pk
),
w2
as
(
partition
by
b
order
by
c
,
pk
);
w2
as
(
partition
by
b
order
by
c
,
pk
);
...
@@ -1014,47 +1016,47 @@ drop table t1;
...
@@ -1014,47 +1016,47 @@ drop table t1;
--
echo
#
--
echo
#
create
table
t1
(
a
int
,
b
int
,
c
int
);
create
table
t1
(
a
int
,
b
int
,
c
int
);
insert
into
t1
values
insert
into
t1
values
(
1
,
3
,
1
),
(
1
,
3
,
1
),
(
2
,
2
,
1
),
(
2
,
2
,
1
),
(
3
,
1
,
1
);
(
3
,
1
,
1
);
--
echo
# Check using counters
--
echo
# Check using counters
flush
status
;
flush
status
;
select
select
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
b
)
rank
()
over
(
partition
by
c
order
by
b
)
from
t1
;
from
t1
;
show
status
like
'%sort%'
;
show
status
like
'%sort%'
;
flush
status
;
flush
status
;
select
select
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
a
)
rank
()
over
(
partition
by
c
order
by
a
)
from
t1
;
from
t1
;
show
status
like
'%sort%'
;
show
status
like
'%sort%'
;
# Check using EXPLAIN FORMAT=JSON
# Check using EXPLAIN FORMAT=JSON
explain
format
=
json
explain
format
=
json
select
select
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
a
)
rank
()
over
(
partition
by
c
order
by
a
)
from
t1
;
from
t1
;
explain
format
=
json
explain
format
=
json
select
select
rank
()
over
(
order
by
a
),
rank
()
over
(
order
by
a
),
row_number
()
over
(
order
by
a
)
row_number
()
over
(
order
by
a
)
from
t1
;
from
t1
;
explain
format
=
json
explain
format
=
json
select
select
rank
()
over
(
partition
by
c
order
by
a
),
rank
()
over
(
partition
by
c
order
by
a
),
count
(
*
)
over
(
partition
by
c
)
count
(
*
)
over
(
partition
by
c
)
from
t1
;
from
t1
;
explain
format
=
json
explain
format
=
json
select
select
count
(
*
)
over
(
partition
by
c
),
count
(
*
)
over
(
partition
by
c
),
rank
()
over
(
partition
by
c
order
by
a
)
rank
()
over
(
partition
by
c
order
by
a
)
from
t1
;
from
t1
;
...
@@ -1094,7 +1096,7 @@ drop table t1;
...
@@ -1094,7 +1096,7 @@ drop table t1;
--
echo
# Try window functions that are not directly present in the select list
--
echo
# Try window functions that are not directly present in the select list
--
echo
#
--
echo
#
create
table
t1
(
a
int
,
b
int
);
create
table
t1
(
a
int
,
b
int
);
insert
into
t1
values
insert
into
t1
values
(
1
,
3
),
(
1
,
3
),
(
2
,
2
),
(
2
,
2
),
(
3
,
1
);
(
3
,
1
);
...
@@ -1128,13 +1130,13 @@ insert into t1 values (1, 2, 2);
...
@@ -1128,13 +1130,13 @@ insert into t1 values (1, 2, 2);
insert
into
t1
values
(
1
,
3
,
4
);
insert
into
t1
values
(
1
,
3
,
4
);
insert
into
t1
values
(
1
,
4
,
8
);
insert
into
t1
values
(
1
,
4
,
8
);
select
select
pk
,
a
,
pk
,
a
,
sum
(
a
)
over
(
order
by
pk
rows
between
0
preceding
and
current
row
)
sum
(
a
)
over
(
order
by
pk
rows
between
0
preceding
and
current
row
)
from
t1
;
from
t1
;
select
select
pk
,
a
,
pk
,
a
,
sum
(
a
)
over
(
order
by
pk
rows
between
1
preceding
and
0
preceding
)
sum
(
a
)
over
(
order
by
pk
rows
between
1
preceding
and
0
preceding
)
from
t1
;
from
t1
;
...
@@ -1142,20 +1144,20 @@ insert into t1 values (200, 1, 1);
...
@@ -1142,20 +1144,20 @@ insert into t1 values (200, 1, 1);
insert
into
t1
values
(
200
,
2
,
2
);
insert
into
t1
values
(
200
,
2
,
2
);
insert
into
t1
values
(
200
,
3
,
4
);
insert
into
t1
values
(
200
,
3
,
4
);
insert
into
t1
values
(
200
,
4
,
8
);
insert
into
t1
values
(
200
,
4
,
8
);
select
select
part_id
,
pk
,
a
,
part_id
,
pk
,
a
,
sum
(
a
)
over
(
partition
by
part_id
order
by
pk
rows
between
0
preceding
and
current
row
)
sum
(
a
)
over
(
partition
by
part_id
order
by
pk
rows
between
0
preceding
and
current
row
)
from
t1
;
from
t1
;
select
select
part_id
,
pk
,
a
,
part_id
,
pk
,
a
,
sum
(
a
)
over
(
partition
by
part_id
order
by
pk
rows
between
1
preceding
and
0
preceding
)
sum
(
a
)
over
(
partition
by
part_id
order
by
pk
rows
between
1
preceding
and
0
preceding
)
from
t1
;
from
t1
;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# MDEV-9780, The "DISTINCT must not bet converted into GROUP BY when
--
echo
# MDEV-9780, The "DISTINCT must not bet converted into GROUP BY when
--
echo
# window functions are present" part
--
echo
# window functions are present" part
--
echo
#
--
echo
#
create
table
t1
(
part_id
int
,
a
int
);
create
table
t1
(
part_id
int
,
a
int
);
...
@@ -1178,8 +1180,8 @@ select distinct rank() over (partition by part_id order by a) from t1;
...
@@ -1178,8 +1180,8 @@ select distinct rank() over (partition by part_id order by a) from t1;
drop
table
t1
;
drop
table
t1
;
--
echo
#
--
echo
#
--
echo
# MDEV-9893: Window functions with different ORDER BY lists,
--
echo
# MDEV-9893: Window functions with different ORDER BY lists,
--
echo
# one of these lists containing an expression
--
echo
# one of these lists containing an expression
--
echo
#
--
echo
#
create
table
t1
(
s1
int
,
s2
char
(
5
));
create
table
t1
(
s1
int
,
s2
char
(
5
));
...
@@ -1189,11 +1191,11 @@ insert into t1 values (3,null);
...
@@ -1189,11 +1191,11 @@ insert into t1 values (3,null);
insert
into
t1
values
(
4
,
'a'
);
insert
into
t1
values
(
4
,
'a'
);
insert
into
t1
values
(
2
,
'b'
);
insert
into
t1
values
(
2
,
'b'
);
insert
into
t1
values
(
-
1
,
''
);
insert
into
t1
values
(
-
1
,
''
);
select
select
*
,
*
,
ROW_NUMBER
()
OVER
(
order
by
s1
),
ROW_NUMBER
()
OVER
(
order
by
s1
),
CUME_DIST
()
OVER
(
order
by
-
s1
)
CUME_DIST
()
OVER
(
order
by
-
s1
)
from
t1
;
from
t1
;
drop
table
t1
;
drop
table
t1
;
...
@@ -1221,7 +1223,7 @@ CREATE TABLE `orders` (
...
@@ -1221,7 +1223,7 @@ CREATE TABLE `orders` (
`o_orderkey`
int
(
11
)
NOT
NULL
,
`o_orderkey`
int
(
11
)
NOT
NULL
,
`o_custkey`
int
(
11
)
DEFAULT
NULL
,
`o_custkey`
int
(
11
)
DEFAULT
NULL
,
PRIMARY
KEY
(
`o_orderkey`
)
PRIMARY
KEY
(
`o_orderkey`
)
)
DEFAULT
CHARSET
=
latin1
;
)
DEFAULT
CHARSET
=
latin1
;
INSERT
INTO
`orders`
VALUES
(
59908
,
242
);
INSERT
INTO
`orders`
VALUES
(
59908
,
242
);
INSERT
INTO
`orders`
VALUES
(
59940
,
238
);
INSERT
INTO
`orders`
VALUES
(
59940
,
238
);
...
@@ -1233,7 +1235,7 @@ SELECT o_custkey, avg(o_custkey) OVER (PARTITION BY abs(o_custkey)
...
@@ -1233,7 +1235,7 @@ SELECT o_custkey, avg(o_custkey) OVER (PARTITION BY abs(o_custkey)
DROP
table
orders
;
DROP
table
orders
;
--
echo
#
--
echo
#
--
echo
# MDEV-10842: window functions with the same order column
--
echo
# MDEV-10842: window functions with the same order column
--
echo
# but different directions
--
echo
# but different directions
--
echo
#
--
echo
#
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment