在PostgreSQL查询中按降序聚合字符串

Dav*_*vid 12 sql postgresql aggregate-functions postgresql-8.4

除了问题如何通过'查询连接PostgreSQL'组中的字符串字段的字符串?

如何按降序对员工进行排序?

我正在使用不支持的PostgreSQL 8.4 string_agg().我试过使用以下内容,但不支持:

array_to_string(array_agg(employee ORDER BY employee DESC), ',')
Run Code Online (Sandbox Code Playgroud)

我很欣赏任何正确答案的暗示.

Erw*_*ter 18

在PostgreSQL 9.0或更高版本中,您可以在聚合函数内部对元素进行排序:

SELECT company_id, array_agg(employee ORDER BY company_id DESC)::text
FROM   tbl
GROUP  BY 1;
Run Code Online (Sandbox Code Playgroud)

这不适用于PostgreSQL 8.4.您必须预先订购要汇总的值.为此目的使用subselect或CTE(8.4+):

SELECT company_id, array_agg(employee)::text
FROM  (SELECT * FROM tbl ORDER BY company_id, employee  DESC) x
GROUP  BY 1;
Run Code Online (Sandbox Code Playgroud)

company_id另外订购,因为这应该加快聚合.

我还使用了将数组转换为text(array_agg(employee)::text)的"技巧" ,它为您提供了一个基本的逗号分隔字符串,没有额外的空格,是最快的方法.
对于更复杂的格式,array_to_string(array_agg(employee), ', ')请在问题中使用.