Details
Description
A query with two aggregate calls, sum(comm) and min(comm), it produces an incorrect plan. The main problem is that it fails to index the input of sum(comm) and min(comm) properly. This seems to only happen in the special case where there is only one distinct aggregate call.
SELECT deptno, sum(comm), min(comm), SUM(DISTINCT sal) FROM emp GROUP BY deptno
AggregateExpandDistinctAggregatesRule produces the following plan in this case.
LogicalAggregate(group=[{0}], EXPR$1=[SUM($3)], EXPR$2=[MIN($3)], EXPR$3=[SUM($1)]) LogicalAggregate(group=[{0, 2}], EXPR$1=[SUM($1)], EXPR$2=[MIN($1)]) LogicalProject(DEPTNO=[$7], COMM=[$6], SAL=[$5]) LogicalTableScan(table=[[CATALOG, SALES, EMP]])
In the above plan, the top LogicalAggregate EXPR$1=[SUM($3]] is incorrect, it should be SUM($2).
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Here is an initial fix for this issue that I noticed for converting a single distinct aggregate call. Please let me know if you have any comments or feedback. Thanks!
https://github.com/apache/calcite/pull/510