Skip to content

Commit f4d21a8

Browse files
authored
Merge pull request #10660 from RinChanNOWWW/fix-grouping-sets
fix: support positions in grouping sets.
2 parents b66f612 + 10d0fa9 commit f4d21a8

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

src/query/sql/src/planner/binder/aggregate.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,11 +509,14 @@ impl Binder {
509509
self.create_column_binding(None, None, alias, scalar.data_type()?)
510510
};
511511
bind_context.aggregate_info.group_items.push(ScalarItem {
512-
scalar,
512+
scalar: scalar.clone(),
513513
index: column_binding.index,
514514
});
515515
entry.insert(bind_context.aggregate_info.group_items.len() - 1);
516516
}
517+
if collect_grouping_sets && !grouping_sets.last().unwrap().contains(&scalar) {
518+
grouping_sets.last_mut().unwrap().push(scalar);
519+
}
517520
continue;
518521
}
519522

tests/sqllogictests/suites/duckdb/sql/aggregate/group/group_by_grouping_sets.test

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,26 @@ NULL 0
1919
NULL 1
2020
NULL 2
2121

22+
query TT
23+
select number % 2 as a, number % 3 as b from numbers(24) group by grouping sets ((1,2), (1), (2)) order by a,b;
24+
----
25+
0 0
26+
0 1
27+
0 2
28+
0 NULL
29+
1 0
30+
1 1
31+
1 2
32+
1 NULL
33+
NULL 0
34+
NULL 1
35+
NULL 2
36+
37+
statement ok
38+
create database if not exists grouping_sets;
39+
40+
statement ok
41+
use grouping_sets;
2242

2343
statement ok
2444
drop table if exists t;
@@ -55,6 +75,19 @@ NULL B 10 0 1 2 1
5575
b NULL 11 1 0 1 2
5676
NULL NULL 18 1 1 3 3
5777

78+
query TTIIIII
79+
select a, b, sum(c) as sc, grouping(b), grouping(a), grouping(a,b), grouping(b,a) from t group by grouping sets ((1,2),(),(2),(1)) order by sc;
80+
----
81+
a A 3 0 0 0 0
82+
a B 4 0 0 0 0
83+
b A 5 0 0 0 0
84+
b B 6 0 0 0 0
85+
a NULL 7 1 0 1 2
86+
NULL A 8 0 1 2 1
87+
NULL B 10 0 1 2 1
88+
b NULL 11 1 0 1 2
89+
NULL NULL 18 1 1 3 3
90+
5891
query TTIIIII
5992
select a, b, sum(c) as sc, grouping(b), grouping(a), grouping(a,b), grouping(b,a) from t group by grouping sets ((a,b),(a),()) order by sc;
6093
----
@@ -80,6 +113,19 @@ NULL B 10 0 1 2 1
80113
b NULL 11 1 0 1 2
81114
NULL NULL 18 1 1 3 3
82115

116+
query TTIIIII
117+
select a, b, sum(c) as sc, grouping(b), grouping(a), grouping(a,b), grouping(b,a) from t group by cube (1,2) order by sc;
118+
----
119+
a A 3 0 0 0 0
120+
a B 4 0 0 0 0
121+
b A 5 0 0 0 0
122+
b B 6 0 0 0 0
123+
a NULL 7 1 0 1 2
124+
NULL A 8 0 1 2 1
125+
NULL B 10 0 1 2 1
126+
b NULL 11 1 0 1 2
127+
NULL NULL 18 1 1 3 3
128+
83129
query TTIIIII
84130
select a, b, sum(c) as sc, grouping(b), grouping(a), grouping(a,b), grouping(b,a) from t group by rollup (a,b) order by sc;
85131
----
@@ -91,5 +137,19 @@ a NULL 7 1 0 1 2
91137
b NULL 11 1 0 1 2
92138
NULL NULL 18 1 1 3 3
93139

140+
query TTIIIII
141+
select a, b, sum(c) as sc, grouping(b), grouping(a), grouping(a,b), grouping(b,a) from t group by rollup (1,2) order by sc;
142+
----
143+
a A 3 0 0 0 0
144+
a B 4 0 0 0 0
145+
b A 5 0 0 0 0
146+
b B 6 0 0 0 0
147+
a NULL 7 1 0 1 2
148+
b NULL 11 1 0 1 2
149+
NULL NULL 18 1 1 3 3
150+
94151
statement ok
95152
drop table t all;
153+
154+
statement ok
155+
drop database grouping_sets;

0 commit comments

Comments
 (0)