当串联两列时,如何在字符串agg中添加顺序

时间:2016-11-11 05:58:05

标签: postgresql

SELECT string_agg( distinct a || '-' || b , ',' ORDER BY a,b) 
FROM table;

以上sql给出错误

  

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

1 个答案:

答案 0 :(得分:3)

the documentation

  

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

所以试试

select string_agg(distinct a || '-' || b, ',' order by a || '-' || b)
from a_table;

或在派生表中使用distinct

select string_agg(a || '-' || b , ',' order by a, b)
from (
    select distinct a, b
    from a_table
    ) s;