小编典典

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

sql

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

我正在使用不支持的PostgreSQL 8.4 string_agg()。我尝试使用以下内容,但不支持此功能:

array_to_string(array_agg(employee ORDER BY employee DESC), ',')

我希望能找到正确答案的任何提示。


阅读 207

收藏
2021-04-22

共1个答案

小编典典

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

SELECT company_id, array_agg(employee ORDER BY company_id DESC)::text
FROM   tbl
GROUP  BY 1;

这不适用于PostgreSQL 8.4
。您必须预先订购要汇总的值。为此,请使用子选择或CTE(8.4+):

SELECT company_id, array_agg(employee)::text
FROM  (SELECT * FROM tbl ORDER BY company_id, employee  DESC) x
GROUP  BY 1;

company_id另外订购,因为这样可以加快聚合速度。

我还使用了将数组强制转换为textarray_agg(employee)::text)的“技巧”
,它为您提供了一个基本的,用逗号分隔的字符串,而没有额外的空格,这是最快的方法。
对于更复杂的格式设置,请使用array_to_string(array_agg(employee), ', ')与问题相同的格式。

2021-04-22