From cd37fbd16414cc4832cb59525ec9d6df262ec051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=AC=A3?= Date: Tue, 30 Nov 2021 22:54:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0SUM+GROUP=20BY=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ipsos/provider/mysql/MysqlQueryProvider.java | 9 +++++++++ backend/src/main/resources/sql/sqlTemplate.stg | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) 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">