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 7c952b5d41aae2..63121fb3db4548 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 @@ -1078,6 +1078,7 @@ private void analyzeAggregation(Analyzer analyzer) throws AnalysisException { List groupingByTupleIds = new ArrayList<>(); if (groupByClause != null) { groupByClause.genGroupingExprs(); + ArrayList groupingExprs = groupByClause.getGroupingExprs(); if (groupingInfo != null) { GroupByClause.GroupingType groupingType = groupByClause.getGroupingType(); if ((groupingType == GroupByClause.GroupingType.GROUPING_SETS && CollectionUtils @@ -1086,16 +1087,26 @@ private void analyzeAggregation(Analyzer analyzer) throws AnalysisException { || groupingType == GroupByClause.GroupingType.ROLLUP) { } - groupingInfo.buildRepeat(groupByClause.getGroupingExprs(), groupByClause.getGroupingSetList()); + groupingInfo.buildRepeat(groupingExprs, groupByClause.getGroupingSetList()); } - substituteOrdinalsAliases(groupByClause.getGroupingExprs(), "GROUP BY", analyzer, false); + substituteOrdinalsAliases(groupingExprs, "GROUP BY", analyzer, false); + + if (!groupByClause.isGroupByExtension() && !groupingExprs.isEmpty()) { + ArrayList tempExprs = new ArrayList<>(groupingExprs); + groupingExprs.removeIf(Expr::isConstant); + if (groupingExprs.isEmpty() && aggExprs.isEmpty()) { + // should keep at least one expr to make the result correct + groupingExprs.add(tempExprs.get(0)); + } + } + if (groupingInfo != null) { - groupingInfo.genOutputTupleDescAndSMap(analyzer, groupByClause.getGroupingExprs(), aggExprs); + groupingInfo.genOutputTupleDescAndSMap(analyzer, groupingExprs, aggExprs); // must do it before copying for createAggInfo() groupingByTupleIds.add(groupingInfo.getOutputTupleDesc().getId()); } groupByClause.analyze(analyzer); - createAggInfo(groupByClause.getGroupingExprs(), aggExprs, analyzer); + createAggInfo(groupingExprs, aggExprs, analyzer); } else { createAggInfo(new ArrayList<>(), aggExprs, analyzer); }