diff --git a/backend/src/main/java/com/ipsos/provider/mysql/MysqlQueryProvider.java b/backend/src/main/java/com/ipsos/provider/mysql/MysqlQueryProvider.java index 559fbf3..e4407c9 100644 --- a/backend/src/main/java/com/ipsos/provider/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/com/ipsos/provider/mysql/MysqlQueryProvider.java @@ -88,6 +88,7 @@ public class MysqlQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) .build(); List xFields = new ArrayList<>(); + String groupBySum = ""; if (CollectionUtils.isNotEmpty(fields)) { for (int i = 0; i < fields.size(); i++) { DatasetTableField f = fields.get(i); @@ -95,6 +96,13 @@ public class MysqlQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 2) { // 解析origin name中有关联的字段生成sql表达式 originField = calcFieldRegex(f.getOriginName(), tableObj); + if (originField.substring(0,3).toLowerCase().equals("sum")) { + String[] originFields = originField.split("\\|"); + if (originFields.length > 1) { + originField = originFields[0]; + groupBySum = originFields[1]; + } + } } else if (ObjectUtils.isNotEmpty(f.getExtField()) && f.getExtField() == 1) { originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), f.getOriginName()); } else { @@ -141,6 +149,7 @@ public class MysqlQueryProvider extends QueryProvider { st_sql.add("isGroup", isGroup); if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); + if (StringUtils.isNotEmpty(groupBySum)) st_sql.add("groupBy", groupBySum); return st_sql.render(); } diff --git a/backend/src/main/resources/sql/sqlTemplate.stg b/backend/src/main/resources/sql/sqlTemplate.stg index 197e443..b8bab4b 100644 --- a/backend/src/main/resources/sql/sqlTemplate.stg +++ b/backend/src/main/resources/sql/sqlTemplate.stg @@ -28,7 +28,7 @@ ORDER BY >> -previewSql(groups, aggregators, filters, orders, table, isGroup) +previewSql(groups, aggregators, filters, orders, table, isGroup, groupBy) ::=<< SELECT @@ -51,6 +51,9 @@ WHERE GROUP BY }; separator=",\n"> + + + ORDER BY }; separator=",\n">