diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java index eafc24c4fdaf76..7c28a417296dcb 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java @@ -39,6 +39,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -46,6 +47,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; /** * Materialized view is performed to materialize the results of query. @@ -339,19 +341,19 @@ private void analyzeGroupByClause() throws AnalysisException { } } - for (Expr groupExpr : groupingExprs) { - boolean match = false; - String rhs = selectStmt.getExprFromAliasSMap(groupExpr).toSqlWithoutTbl(); - for (Expr expr : selectExprs) { - String lhs = selectStmt.getExprFromAliasSMap(expr).toSqlWithoutTbl(); - if (lhs.equalsIgnoreCase(rhs)) { - match = true; - break; - } + Set selectExprNames = Sets.newTreeSet(String.CASE_INSENSITIVE_ORDER); + for (Expr expr : selectExprs) { + String selectExprName = selectStmt.getExprFromAliasSMap(expr).toSqlWithoutTbl(); + if (selectExprNames.contains(selectExprName)) { + throw new AnalysisException("The select expr " + selectExprName + " is duplicated."); } + selectExprNames.add(selectExprName); + } - if (!match) { - throw new AnalysisException("The grouping expr " + rhs + " not in select list."); + for (Expr expr : groupingExprs) { + String groupExprName = selectStmt.getExprFromAliasSMap(expr).toSqlWithoutTbl(); + if (!selectExprNames.contains(groupExprName)) { + throw new AnalysisException("The grouping expr " + groupExprName + " not in select list."); } } } diff --git a/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy b/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy index bdf7a567beb370..9bf940e2e4f4c2 100644 --- a/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy +++ b/regression-test/suites/mv_p0/test_mv_useless/agg_invalid/agg_invalid.groovy @@ -41,4 +41,14 @@ suite ("agg_invalid") { sql "CREATE MATERIALIZED VIEW mv_4 AS SELECT p1, SUM(abs(v1)) FROM t1 GROUP BY p1;" exception "errCode = 2," } + + test { + sql "CREATE MATERIALIZED VIEW mv_5 AS SELECT p1, p2, p1, SUM(v1) FROM t1 GROUP BY p1,p2,p1;" + exception "errCode = 2," + } + + test { + sql "CREATE MATERIALIZED VIEW mv_5 AS SELECT p1, p2, SUM(v1), SUM(v1) FROM t1 GROUP BY p1,p2;" + exception "errCode = 2," + } }