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

时间:2012-05-06 12:43:13

标签: sql postgresql aggregate-functions postgresql-8.4

除问题How to concatenate strings of a string field in a PostgreSQL 'group by' query?

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

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

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

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

1 个答案:

答案 0 :(得分:16)

在PostgreSQL 9.0 或更高版本中,您可以order elements inside aggregate functions

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), ', ')