diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java index 5c2d6c9aff1bb0..b2b4c30b9342fc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java @@ -273,13 +273,17 @@ protected boolean condition(Rule rule, Plan plan) { group_by_key is bound on t1.a */ duplicatedSlotNames.forEach(childOutputsToExpr::remove); - output.stream() - .filter(ne -> ne instanceof Alias) - .map(Alias.class::cast) - // agg function cannot be bound with group_by_key - .filter(alias -> !alias.child() - .anyMatch(expr -> expr instanceof AggregateFunction)) - .forEach(alias -> childOutputsToExpr.putIfAbsent(alias.getName(), alias.child())); + for (int i = 0; i < output.size(); i++) { + if (!(output.get(i) instanceof Alias)) { + continue; + } + Alias alias = (Alias) output.get(i); + if (alias.child().anyMatch(expr -> expr instanceof AggregateFunction)) { + continue; + } + // NOTICE: must use unbound expressions, because we will bind them in binding group by expr. + childOutputsToExpr.putIfAbsent(alias.getName(), agg.getOutputExpressions().get(i).child(0)); + } List replacedGroupBy = agg.getGroupByExpressions().stream() .map(groupBy -> { diff --git a/regression-test/suites/nereids_syntax_p0/analyze_agg.groovy b/regression-test/suites/nereids_syntax_p0/analyze_agg.groovy index 55bb2deab2384b..9f426e23e3d133 100644 --- a/regression-test/suites/nereids_syntax_p0/analyze_agg.groovy +++ b/regression-test/suites/nereids_syntax_p0/analyze_agg.groovy @@ -43,7 +43,8 @@ suite("analyze_agg") { d VARCHAR(30), e VARCHAR(32), a VARCHAR(32), - f VARCHAR(32) + f VARCHAR(32), + g DECIMAL(9, 3) )ENGINE = OLAP UNIQUE KEY(id) DISTRIBUTED BY HASH(id) BUCKETS 30 @@ -73,4 +74,7 @@ suite("analyze_agg") { sql "select count(distinct t2.b), variance(distinct t2.c) from t2" exception "variance(DISTINCT c#2) can't support multi distinct." } + + // should not bind g /g in group by again, otherwise will throw exception + sql "select g / g as nu, sum(c) from t2 group by nu" } \ No newline at end of file