当两列连接时,如何在字符串 agg 中添加 order by

use*_*990 5 postgresql aggregate-functions

SELECT string_agg( distinct a || '-' || b , ',' ORDER BY a,b) 
FROM table;
Run Code Online (Sandbox Code Playgroud)

上面的sql报错

错误:在具有 DISTINCT 的聚合中,ORDER BY 表达式必须出现在参数列表中

kli*_*lin 4

对于文档

如果除了 order_by_clause 之外还指定了 DISTINCT,则所有 ORDER BY 表达式必须与聚合的常规参数匹配;也就是说,您无法对未包含在 DISTINCT 列表中的表达式进行排序。

所以尝试一下

select string_agg(distinct a || '-' || b, ',' order by a || '-' || b)
from a_table;
Run Code Online (Sandbox Code Playgroud)

distinct或在派生表中使用:

select string_agg(a || '-' || b , ',' order by a, b)
from (
    select distinct a, b
    from a_table
    ) s;
Run Code Online (Sandbox Code Playgroud)