This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-lts in repository https://gitbox.apache.org/repos/asf/doris.git
commit a0342ee47c47925701e966924eda3585b033eea6 Author: starocean999 <40539150+starocean...@users.noreply.github.com> AuthorDate: Wed Dec 7 14:13:17 2022 +0800 [fix](agg)having clause should use alias if there is no group by clause (#14831) --- .../java/org/apache/doris/analysis/SelectStmt.java | 21 +++++++++++++++------ .../data/correctness_p0/test_group_having_alias.out | 5 +++++ .../correctness_p0/test_group_having_alias.groovy | 9 +++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) 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 3f754595f1..5e1cb19a73 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 @@ -985,12 +985,21 @@ public class SelectStmt extends QueryStmt { * (select min(k1) from table b where a.key=b.k2); * TODO: the a.key should be replaced by a.k1 instead of unknown column 'key' in 'a' */ - try { - // use col name from tableRefs first - havingClauseAfterAnaylzed = havingClause.clone(); - havingClauseAfterAnaylzed.analyze(analyzer); - } catch (AnalysisException ex) { - // then consider alias name + if (groupByClause != null) { + // according to mysql + // if there is a group by clause, the having clause should use column name not alias + // this is the same as group by clause + try { + // use col name from tableRefs first + havingClauseAfterAnaylzed = havingClause.clone(); + havingClauseAfterAnaylzed.analyze(analyzer); + } catch (AnalysisException ex) { + // then consider alias name + havingClauseAfterAnaylzed = havingClause.substitute(aliasSMap, analyzer, false); + } + } else { + // according to mysql + // if there is no group by clause, the having clause should use alias havingClauseAfterAnaylzed = havingClause.substitute(aliasSMap, analyzer, false); } havingClauseAfterAnaylzed = rewriteQueryExprByMvColumnExpr(havingClauseAfterAnaylzed, analyzer); diff --git a/regression-test/data/correctness_p0/test_group_having_alias.out b/regression-test/data/correctness_p0/test_group_having_alias.out index bb2ad80ef9..fa1e177399 100644 --- a/regression-test/data/correctness_p0/test_group_having_alias.out +++ b/regression-test/data/correctness_p0/test_group_having_alias.out @@ -5,3 +5,8 @@ -- !sql -- 202245 3 +-- !sql -- +202245 +202245 +202245 + diff --git a/regression-test/suites/correctness_p0/test_group_having_alias.groovy b/regression-test/suites/correctness_p0/test_group_having_alias.groovy index 6416240291..1ff8dbbad8 100644 --- a/regression-test/suites/correctness_p0/test_group_having_alias.groovy +++ b/regression-test/suites/correctness_p0/test_group_having_alias.groovy @@ -62,6 +62,15 @@ ORDER BY date2; """ + qt_sql """ + SELECT + date_format(date, '%x%v') AS `date` + FROM `tb_holiday` + WHERE `date` between 20221111 AND 20221116 + HAVING date = 202245 + ORDER BY date; + """ + sql """ DROP TABLE IF EXISTS `tb_holiday`; """ --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org