File tree Expand file tree Collapse file tree 3 files changed +85
-1
lines changed Expand file tree Collapse file tree 3 files changed +85
-1
lines changed Original file line number Diff line number Diff line change @@ -390,7 +390,7 @@ make_ands_implicit(Expr *clause)
390390
391391/*
392392 * contain_agg_clause
393- * Recursively search for Aggref nodes within a clause.
393+ * Recursively search for Aggref/GroupingFunc nodes within a clause.
394394 *
395395 * Returns true if any aggregate found.
396396 *
@@ -417,6 +417,11 @@ contain_agg_clause_walker(Node *node, void *context)
417417 Assert (((Aggref * ) node )-> agglevelsup == 0 );
418418 return true; /* abort the tree traversal and return true */
419419 }
420+ if (IsA (node , GroupingFunc ))
421+ {
422+ Assert (((GroupingFunc * ) node )-> agglevelsup == 0 );
423+ return true; /* abort the tree traversal and return true */
424+ }
420425 Assert (!IsA (node , SubLink ));
421426 return expression_tree_walker (node , contain_agg_clause_walker , context );
422427}
Original file line number Diff line number Diff line change @@ -486,6 +486,68 @@ having exists (select 1 from onek b where sum(distinct a.four) = b.four);
486486 9 | 3
487487(25 rows)
488488
489+ -- HAVING with GROUPING queries
490+ select ten, grouping(ten) from onek
491+ group by grouping sets(ten) having grouping(ten) >= 0
492+ order by 2,1;
493+ ten | grouping
494+ -----+----------
495+ 0 | 0
496+ 1 | 0
497+ 2 | 0
498+ 3 | 0
499+ 4 | 0
500+ 5 | 0
501+ 6 | 0
502+ 7 | 0
503+ 8 | 0
504+ 9 | 0
505+ (10 rows)
506+
507+ select ten, grouping(ten) from onek
508+ group by grouping sets(ten, four) having grouping(ten) > 0
509+ order by 2,1;
510+ ten | grouping
511+ -----+----------
512+ | 1
513+ | 1
514+ | 1
515+ | 1
516+ (4 rows)
517+
518+ select ten, grouping(ten) from onek
519+ group by rollup(ten) having grouping(ten) > 0
520+ order by 2,1;
521+ ten | grouping
522+ -----+----------
523+ | 1
524+ (1 row)
525+
526+ select ten, grouping(ten) from onek
527+ group by cube(ten) having grouping(ten) > 0
528+ order by 2,1;
529+ ten | grouping
530+ -----+----------
531+ | 1
532+ (1 row)
533+
534+ select ten, grouping(ten) from onek
535+ group by (ten) having grouping(ten) >= 0
536+ order by 2,1;
537+ ten | grouping
538+ -----+----------
539+ 0 | 0
540+ 1 | 0
541+ 2 | 0
542+ 3 | 0
543+ 4 | 0
544+ 5 | 0
545+ 6 | 0
546+ 7 | 0
547+ 8 | 0
548+ 9 | 0
549+ (10 rows)
550+
489551-- FILTER queries
490552select ten, sum(distinct four) filter (where four::text ~ '123') from onek a
491553group by rollup(ten);
Original file line number Diff line number Diff line change @@ -154,6 +154,23 @@ select ten, sum(distinct four) from onek a
154154group by grouping sets((ten,four),(ten))
155155having exists (select 1 from onek b where sum (distinct a .four ) = b .four );
156156
157+ -- HAVING with GROUPING queries
158+ select ten, grouping(ten) from onek
159+ group by grouping sets(ten) having grouping(ten) >= 0
160+ order by 2 ,1 ;
161+ select ten, grouping(ten) from onek
162+ group by grouping sets(ten, four) having grouping(ten) > 0
163+ order by 2 ,1 ;
164+ select ten, grouping(ten) from onek
165+ group by rollup(ten) having grouping(ten) > 0
166+ order by 2 ,1 ;
167+ select ten, grouping(ten) from onek
168+ group by cube(ten) having grouping(ten) > 0
169+ order by 2 ,1 ;
170+ select ten, grouping(ten) from onek
171+ group by (ten) having grouping(ten) >= 0
172+ order by 2 ,1 ;
173+
157174-- FILTER queries
158175select ten, sum (distinct four) filter (where four::text ~ ' 123' ) from onek a
159176group by rollup(ten);
You can’t perform that action at this time.
0 commit comments