diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index e28587f84fc14f..44d196e18e8e8d 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -547,7 +547,12 @@ private String paramsToSql() { for (int i = 0; i < len; ++i) { if (i != 0) { - sb.append(", "); + if (fnName.getFunction().equalsIgnoreCase("group_concat") + && orderByElements.size() > 0 && i == len - orderByElements.size()) { + sb.append(" "); + } else { + sb.append(", "); + } } if (ConnectContext.get() != null && ConnectContext.get().getState().isQuery() && i == 1 && (fnName.getFunction().equalsIgnoreCase("aes_decrypt") @@ -1785,6 +1790,11 @@ && collectChildReturnTypes()[0].isDecimalV3()) { } // rewrite return type if is nested type function analyzeNestedFunction(); + for (OrderByElement o : orderByElements) { + if (!o.getExpr().isAnalyzed) { + o.getExpr().analyzeImpl(analyzer); + } + } } // if return type is nested type, need to be determined the sub-element type diff --git a/regression-test/data/nereids_p0/group_concat/test_group_concat.out b/regression-test/data/nereids_p0/group_concat/test_group_concat.out index 16467f6be70488..2d97d501224f3c 100644 --- a/regression-test/data/nereids_p0/group_concat/test_group_concat.out +++ b/regression-test/data/nereids_p0/group_concat/test_group_concat.out @@ -59,3 +59,7 @@ false 1 3,21,2,11,1 2 23,222,22,211,21 +-- !select_group_concat_order_by_desc4 -- +1 3,21,2,11,1 +2 23,222,22,211,21 + diff --git a/regression-test/data/query_p0/group_concat/test_group_concat.out b/regression-test/data/query_p0/group_concat/test_group_concat.out index 7153ce1be323f3..d01900ef88bdbb 100644 --- a/regression-test/data/query_p0/group_concat/test_group_concat.out +++ b/regression-test/data/query_p0/group_concat/test_group_concat.out @@ -63,6 +63,9 @@ false 1 3,21,2,11,1 2 23,222,22,211,21 --- !select_group_concat_order_by -- +-- !select_group_concat_order_by1 -- +1,11,2,21,21,211,22,222,23,3 3,23,222,22,211,21,21,2,11,1 + +-- !select_group_concat_order_by2 -- 1,11,2,21,21,211,22,222,23,3 3,23,222,22,211,21,21,2,11,1 diff --git a/regression-test/suites/nereids_p0/group_concat/test_group_concat.groovy b/regression-test/suites/nereids_p0/group_concat/test_group_concat.groovy index b9896f5cf8036a..a570ac3da165ed 100644 --- a/regression-test/suites/nereids_p0/group_concat/test_group_concat.groovy +++ b/regression-test/suites/nereids_p0/group_concat/test_group_concat.groovy @@ -113,4 +113,10 @@ suite("test_group_concat") { qt_select_group_concat_order_by_desc3 """ SELECT b1, group_concat(cast(abs(b3) as varchar) order by abs(b2) desc, b3 desc) FROM table_group_concat group by b1 order by b1 """ + + sql """create view if not exists test_view as SELECT b1, group_concat(cast(abs(b3) as varchar) order by abs(b2) desc, b3 desc) FROM table_group_concat group by b1 order by b1;""" + qt_select_group_concat_order_by_desc4 """ + select * from test_view; + """ + sql """drop view if exists test_view""" } diff --git a/regression-test/suites/query_p0/group_concat/test_group_concat.groovy b/regression-test/suites/query_p0/group_concat/test_group_concat.groovy index b37c28d01beb96..2247cc4e5fc83c 100644 --- a/regression-test/suites/query_p0/group_concat/test_group_concat.groovy +++ b/regression-test/suites/query_p0/group_concat/test_group_concat.groovy @@ -119,8 +119,13 @@ suite("test_group_concat") { qt_select_group_concat_order_by_desc3 """ SELECT b1, group_concat(cast(abs(b3) as varchar) order by abs(b2) desc, b3 desc) FROM table_group_concat group by b1 order by b1 """ - qt_select_group_concat_order_by """ + qt_select_group_concat_order_by1 """ select group_concat(b3,',' order by b3 asc),group_concat(b3,',' order by b3 desc) from table_group_concat; """ + sql """create view if not exists test_view as select group_concat(b3,',' order by b3 asc),group_concat(b3,',' order by b3 desc) from table_group_concat;""" + qt_select_group_concat_order_by2 """ + select * from test_view; + """ + sql """drop view if exists test_view""" }