@@ -20,29 +20,22 @@ public class GroupByCorrector extends BaseSemanticCorrector {
2020 public void correct (SemanticCorrectInfo semanticCorrectInfo ) {
2121
2222 super .correct (semanticCorrectInfo );
23- Long modelId = semanticCorrectInfo .getParseInfo ().getModel ().getModel ();
24- // if select not exit metric not add aggregate
25- List <String > selectFields = SqlParserSelectHelper .getSelectFields (semanticCorrectInfo .getSql ());
2623
27- Set <String > metrics = getMetricElements (modelId ).stream ()
28- .map (schemaElement -> schemaElement .getName ())
29- .collect (Collectors .toSet ());
24+ addGroupByFields (semanticCorrectInfo );
3025
31- if (!CollectionUtils .isEmpty (selectFields )
32- && !CollectionUtils .isEmpty (metrics )
33- && selectFields .stream ().anyMatch (s -> metrics .contains (s ))) {
34- //add aggregate to all metric
35- addAggregateToMetric (semanticCorrectInfo );
36- }
26+ addAggregate (semanticCorrectInfo );
27+ }
28+
29+ private void addGroupByFields (SemanticCorrectInfo semanticCorrectInfo ) {
30+ Long modelId = semanticCorrectInfo .getParseInfo ().getModel ().getModel ();
3731
3832 //add dimension group by
3933 String sql = semanticCorrectInfo .getSql ();
4034 SemanticSchema semanticSchema = ContextUtils .getBean (SchemaService .class ).getSemanticSchema ();
41-
4235 Set <String > dimensions = semanticSchema .getDimensions (modelId ).stream ()
4336 .map (schemaElement -> schemaElement .getName ()).collect (Collectors .toSet ());
4437 dimensions .add (DateUtils .DATE_FIELD );
45- selectFields = SqlParserSelectHelper .getSelectFields (sql );
38+ List < String > selectFields = SqlParserSelectHelper .getSelectFields (sql );
4639
4740 if (CollectionUtils .isEmpty (selectFields ) || CollectionUtils .isEmpty (dimensions )) {
4841 return ;
@@ -58,7 +51,13 @@ public void correct(SemanticCorrectInfo semanticCorrectInfo) {
5851 })
5952 .collect (Collectors .toSet ());
6053 semanticCorrectInfo .setSql (SqlParserAddHelper .addGroupBy (sql , groupByFields ));
54+ }
6155
56+ private void addAggregate (SemanticCorrectInfo semanticCorrectInfo ) {
57+ List <String > sqlGroupByFields = SqlParserSelectHelper .getGroupByFields (semanticCorrectInfo .getSql ());
58+ if (CollectionUtils .isEmpty (sqlGroupByFields )) {
59+ return ;
60+ }
6261 addAggregateToMetric (semanticCorrectInfo );
6362 }
6463}
0 commit comments