添加SUM+GROUP BY函数

master
黄欣 4 years ago
parent 773093114c
commit cd37fbd164

@ -88,6 +88,7 @@ public class MysqlQueryProvider extends QueryProvider {
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
.build();
List<SQLObj> 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();
}

@ -28,7 +28,7 @@ ORDER BY
>>
previewSql(groups, aggregators, filters, orders, table, isGroup)
previewSql(groups, aggregators, filters, orders, table, isGroup, groupBy)
::=<<
SELECT
<if(!groups && !aggregators)>
@ -51,6 +51,9 @@ WHERE
GROUP BY
<groups:{group|<if(group)><group.fieldName><endif>}; separator=",\n">
<endif>
<if(groupBy)>
<groupBy>
<endif>
<if(orders)>
ORDER BY
<orders:{order|<if(order)><order.orderAlias> <order.orderDirection><endif>}; separator=",\n">

Loading…
Cancel
Save