diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java index a03cbd06c6..b3aebb6ff6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java @@ -1406,7 +1406,15 @@ public class SelectStmt extends QueryStmt { } if (orderByElements != null) { for (OrderByElement orderByElem : orderByElements) { + // we must make sure the expr is analyzed before rewrite + try { + orderByElem.getExpr().analyze(analyzer); + } catch (AnalysisException ex) { + //ignore any exception + } orderByElem.setExpr(rewriter.rewrite(orderByElem.getExpr(), analyzer)); + // after rewrite, need reset the analyze status for later re-analyze + orderByElem.getExpr().reset(); } } } diff --git a/regression-test/suites/correctness_p0/test_group_by_constant.groovy b/regression-test/suites/correctness_p0/test_group_by_constant.groovy index 39f0164916..5420dfd238 100644 --- a/regression-test/suites/correctness_p0/test_group_by_constant.groovy +++ b/regression-test/suites/correctness_p0/test_group_by_constant.groovy @@ -49,6 +49,13 @@ suite("test_group_by_constant") { from table_group_by_constant group by + case + when (inc_day = date_sub(curdate(), interval 1 day)) then 'A' + when (inc_day = date_sub(curdate(), interval 8 day)) then 'B' + when (inc_day = date_sub(curdate(), interval 365 day)) then 'C' + else 'D' + end + order by case when (inc_day = date_sub(curdate(), interval 1 day)) then 'A' when (inc_day = date_sub(curdate(), interval 8 day)) then 'B' @@ -68,6 +75,8 @@ suite("test_group_by_constant") { from table_group_by_constant group by + val + order by val; """