12

除了问题如何在 PostgreSQL 'group by' 查询中连接字符串字段的字符串?

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

我正在使用不支持string_agg(). 我尝试使用以下内容,但不受支持:

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

对于正确答案的任何提示,我将不胜感激。

4

1 回答 1

21

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

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

PostgreSQL 8.4既不可用string_agg()也不可用。您必须预先订购要聚合的值。为此使用子选择或CTE (pg 8.4+):ORDER BY

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

company_id另外订购,因为这应该加快随后的聚合。

不那么优雅,但速度更快。(对于 Postgres 14 仍然如此。)

看:

于 2012-05-06T13:05:24.000 回答